2

我刚刚开始使用 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。那么问题是什么?提前致谢!

4

1 回答 1

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"]]
于 2013-04-20T12:51:02.127 回答