Ruby 树梢忽略语法规则
Treetop似乎忽略了第一条规则之后的turther规则,并且无法解析与语法文件上的第一条规则不匹配的任何内容。 我已经尝试交换规则的顺序,但仍然只考虑第一个Ruby 树梢忽略语法规则,ruby,grammar,peg,treetop,Ruby,Grammar,Peg,Treetop,Treetop似乎忽略了第一条规则之后的turther规则,并且无法解析与语法文件上的第一条规则不匹配的任何内容。 我已经尝试交换规则的顺序,但仍然只考虑第一个 # grammar_pov.treetop grammar Pov rule numeric '-'? [0-9]+ ('.' [0-9]+)? <::PovFabric::Nodes::NumericLiteral> end rule comma ',' en
# grammar_pov.treetop
grammar Pov
rule numeric
'-'? [0-9]+ ('.' [0-9]+)? <::PovFabric::Nodes::NumericLiteral>
end
rule comma
','
end
rule space
[\s]+
end
end
#语法#pov.treetop
语法视角
规则数字
'-'? [0-9]+ ('.' [0-9]+)?
结束
规则逗号
','
结束
规则空间
[\s]+
结束
结束
此语法文件匹配所有整数和浮点,但不匹配“123、456”或“123456”
parser failure_reason属性表示“预期-在第1行第1列(字节1)后面”
我遗漏了什么吗?你的
逗号和空格规则没有在任何地方使用。所以,它们只是死代码。就像Jörg提到的那样,您需要在语法中使用逗号
和空格
规则。我在下面构建了一个简单的示例,我认为您正试图实现以下目标。它应该匹配“100”
,“1000”
,“1000000”
,等等
如果你看数字规则,首先我测试减法符号“-”?
,然后测试一到三个数字,然后测试零个或多个逗号和三个数字的组合
require 'treetop'
Treetop.load_from_string DATA.read
parser = PovParser.new
p parser.parse('1,000,000')
__END__
grammar Pov
rule numeric
'-'? digit 1..3 (comma space* (digit 3..3))*
end
rule digit
[0-9]
end
rule comma
','
end
rule space
[\s]
end
end
你能详细说明一下吗?逗号规则不应该匹配“123456”和“123456”?不,逗号规则匹配“code>”、“
”和其他规则。但无论如何,这是完全不相关的,因为这条规则甚至没有在任何地方使用。这与定义一个子例程而从不调用它是一样的。没问题,很高兴我能帮上忙:)