我正在尝试为C的子集编写解析器。
这种简单(进一步简化)的语法很难分析树梢的行为。
grammar Shyc
rule functionDef
type space identifier '(' ')' bloc
end
rule type
'int'
end
rule bloc
'{' '}'
end
rule identifier
[a-zA-Z] [a-zA-Z_]*
end
rule space
[\s]+
end
end
我的测试用例是“int main(){}”
来自treetop的错误消息是:
error at line 1, column 9
failure reason : Expected [a-zA-Z_] at line 1, column 9 (byte 9) after
compiler.rb:25:in `parse': Parse error (RuntimeError)
from compiler.rb:73:in `<main>'enter
因此问题在于标识符规则......
treetop的版本:1.5.3和Ruby 2.1.1
有什么想法吗?
答案 0 :(得分:0)
问题是我的测试用例是在一个单独的文件中,最后是一个补充的行尾\ n,并且这里测试的语法没有指定如何使用它。
以下是解决问题的代码。正如Treetop邮件列表中所讨论的那样here,错误是奇怪的,并且有些误导,但一般来说很难自动发出明确的信息。
grammar Shyc
rule functionDef
type space identifier '(' ')' bloc space?
end
rule type
'int'
end
rule bloc
'{' '}'
end
rule identifier
[a-zA-Z] [a-zA-Z_]*
end
rule space
[\s\n]+
end
端