Преобразование EBNF к BNF

Это были несколько лет начиная с моего класса языка программирования и таким образом, я забыл тонкости BNF's и EBNF's, и у меня нет учебника рядом со мной. А именно, я забыл, как преобразовать EBNF в BNF.

Из того, что мало я помню, я знаю, что один из основных моментов должен преобразовать { term } в <term> | <many-terms>. Но я не помню других правил. Я попытался искать это онлайн, но я могу только найти ссылки или на вопросы о домашней работе или на маленький комментарий о преобразовании условий с фигурными скобками. Я не могу найти исчерпывающий список правил, которые определяют перевод.

8
задан Bo Persson 30 August 2011 в 19:29
поделиться

1 ответ

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

http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3. html

Для построения синтаксических анализаторов (особенно восходящих) грамматика BNF часто бывает лучше, чем EBNF. Но легко преобразовать грамматику EBNF в BNF:

  • Преобразуйте каждое повторение {E} в новый нетерминальный X и добавьте

     X = ε | X E. 
     
  • Преобразуйте каждый параметр [E] в новый нетерминальный X и добавьте

     X = ε | E. 
     

    (Мы можем преобразовать X = A [E] B. в X = AEB | A B. )

  • Преобразовать каждую группу (E) в новый нетерминальный X и добавить

     X = E. 
     
  • Мы даже можем избавиться от альтернатив, создав несколько производств с такой же нетерминальный.

    X = E | E '. становится X = E. X = E '.

20
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: