我刚刚开始使用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。那么问题出在哪里呢?提前感谢!
发布于 2013-04-20 20:51:02
我想我刚刚发现哪里错了!应该有一个包含其他规则的顶层规则,它被放置为第一个规则:
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"]]https://stackoverflow.com/questions/16059997
复制相似问题