2014-07-10 52 views
0

我试图写C.树顶看起来

的一个子集解析器树梢的行为是很难分析这个简单的(进一步简化)语法一个简单的语法失败(5条规则)。

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()的{}”

而且从树梢的错误信息是:

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 

问题是由此围绕标识符规则...

树顶版本:1.5.3和Ruby 2.1.1

任何想法?

+0

这对我的作品(TT 1.4.10,红宝石2.0.0p353)。也许你有一个原因导致您无法加载了最新.treetop文件遗留下来的TT-编译.RB文件?之前我曾经咬过我。 – wdebeaum

+0

对我的作品还有,可能是与你的文件被设置方式问题。 –

回答

0

的问题是,我的测试案例是在一个单独的文件,并在最后补充结束线\ n和这里测试的语法没有规定如何消费这一点。

下面是解决该问题的代码。由于树顶的邮件列表上讨论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