簡體   English   中英

樹梢忽略語法規則

[英]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)”

我想念什么嗎?

您的commaspace規則不在任何地方使用。 因此,它們只是無效代碼。

就像Jörg提到的那樣,您需要在語法中使用commaspace規則。 我在下面構建了一個簡單的示例,說明我想您要完成的工作。 它應匹配"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM