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 правила нигде не используются. Итак, они просто мертвый код.

Другие вопросы по тегам