Преобразование EBNF в BNF - PullRequest
7 голосов
/ 18 марта 2010

Прошло несколько лет с тех пор, как я изучал компьютерный язык, и поэтому я забыл о тонкостях BNF и EBNF, и у меня нет учебника рядом со мной. В частности, я забыл, как конвертировать EBNF в BNF.

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

1 Ответ

19 голосов
/ 18 марта 2010

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

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 = A E B | A B.)

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

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

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

...