Преобразование грамматики EBNF в PEG


person XTRUST.ORG    schedule 29.10.2018    source источник


Ответы (1)


Существует несколько реализаций Peg, и все они добавляют что-то к общим соглашениям, принятым Peg, а именно:

  • Операторы "*", "+" и "?" имеют то же значение, что и в регулярных выражениях;
  • Альтернативы на самом деле являются приоритетными вариантами, и они используют оператор «/» для обозначения этой разницы;
  • Операторы "&" и "!" обозначают положительный и отрицательный просмотр вперед нулевой длины (т. е. они не продвигают «текущий» указатель);

В EBNF повторение представлено «{}», которое в Peg представлено оператором «*», что означает ноль или более повторений субъекта. Например, ваше первое правило грамматики может быть представлено следующим образом в гипотетической реализации Peg:

query = (word / wildcard)* 

Оператор EBNF "[ ]" имеет то же значение, что и оператор Peg "?" оператор, что означает, что подлежащее является необязательным. Вот ваше второе правило, так как его можно преобразовать в Peg:

word = (apostrophe?  letter alpha*) / ","

Наконец, некоторые реализации Peg позволяют использовать регулярные выражения непосредственно в своей грамматике. Посмотрите, как ваше третье правило может быть представлено в такой привязке:

letter = [a-zA-Z]

В зависимости от используемого языка и конкретной реализации Peg некоторые вещи могут измениться, но я надеюсь, что эти рекомендации укажут вам правильное направление.

person Branco Medeiros    schedule 05.11.2018