Treetop игнорировать правила грамматики
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". Свойство parser fault_reason говорит следующее: "Ожидается - в строке 1, столбце 1 (байт 1) после"
Я что-то пропустил?
2 ответа
Как упоминал Йорг, вам нужно использовать 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
Ваш comma
а также space
правила нигде не используются. Итак, они просто мертвый код.