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