[英]Treetop ignore grammar rules
Treetop似乎忽略了第一個規則之后的更復雜的規則,並且未能解析與語法文件中的第一個規則不匹配的任何內容。 我已經嘗試過交換規則的順序,但是仍然只考慮第一個規則。
# grammar_pov.treetop
grammar Pov
rule numeric
'-'? [0-9]+ ('.' [0-9]+)? <::PovFabric::Nodes::NumericLiteral>
end
rule comma
','
end
rule space
[\s]+
end
end
該語法文件匹配所有整數和浮點數,但不匹配“ 123、456”或“ 123,456”。解析器failure_reason屬性表示此“ Expected-在第1行,第1列(字節1)”
我想念什么嗎?
您的comma
和space
規則不在任何地方使用。 因此,它們只是無效代碼。
就像Jörg提到的那樣,您需要在語法中使用comma
和space
規則。 我在下面構建了一個簡單的示例,說明我想您要完成的工作。 它應匹配"100"
, "1,000"
, "1,000,000"
等。
如果您看一下數字規則,首先我要測試減號'-'?
,然后測試一到三位數,然后測試comma
或三位數的零個或多個組合。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.