规则的顺序在TreeTop中很重要吗?

时间:2013-04-17 12:26:30

标签: ruby treetop

我刚开始使用TreeTop进行解析工作。以下是令我困惑的片段:

grammar Fortran
    rule integer
        [1-9] [0-9]*
    end

    rule id
        [a-zA-Z] [a-zA-Z0-9]*
    end
end

parser = FortranParser.new
ast = parser.parse('1')

结果ast是:

[SyntaxNode offset=0, "1", SyntaxNode offset=1, ""]

但是当我将rule id放在rule integer之上时,结果为nil。那么问题是什么?提前谢谢!

1 个答案:

答案 0 :(得分:3)

我想我只知道哪里出错!!!应该有一个包含其他规则的顶级规则,这些规则作为第一条规则放置:

grammar Fortran
    rule statement
        ( id / integer )* {
            def content
                elements.map { |e| e.content }
            end
        }
    end

    rule id
        [a-zA-Z] [a-zA-Z0-9]* {
            def content
                [:id, text_value]
            end
        }
    end

    rule integer
        [1-9] [0-9]* {
            def content
                [:integer, text_value]
            end
        }
    end
end

parser = FortranParser.new
ast = parser.parse('1')

然后结果是

[[:integer, "1"]]