树顶似乎在一个简单的语法上失败(5条规则)

时间:2014-07-10 13:25:18

标签: ruby treetop

我正在尝试为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

有什么想法吗?

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