【问题标题】:Treetop seems to fail on a simple grammar (5 rules)Treetop 似乎在一个简单的语法上失败了(5 条规则)
【发布时间】:2014-07-10 13:25:17
【问题描述】:

我正在尝试为 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(){}”

而树顶的错误信息是:

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

有什么想法吗?

【问题讨论】:

  • 这对我有用(tt 1.4.10,ruby 2.0.0p353)。也许你有一个剩余的 tt 编译的 .rb 文件阻止你加载最新的 .treetop 文件?我以前也被它咬过。
  • 也适用于我,可能是您的文件设置方式有问题。

标签: ruby treetop


【解决方案1】:

问题是我的测试用例在一个单独的文件中,最后有一个补充的行尾 \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

结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-18
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多