6

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

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

ответ

16

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

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'.

+0

Отлично! Это именно то, что мне нужно. Кто-то, я никогда не нашел эту ссылку! –

+1

Я получаю 404 на этой ссылке сейчас ... любая идея, если где-то есть обновленная версия? – Steve

+0

Увы, не с головы. Надеемся, страница вернется. –