Написание парсера вручную

Мне нужно написать парсер вручную. Не могу выбрать между LL(*) и LR (может быть, попробовать Earley?). Должен ли я использовать анализ снизу вверх, потому что грамматика для LL будет довольно сложной?

4 ответа

Я бы выбрал либо парсер рекурсивного спуска, либо, возможно, парсер хвостового рекурсивного спуска (т. Е. LL), либо парсер приоритета оператора сверху вниз.

Семейство парсеров LR, будь то LR, LALR(k), LALR(1), GLR или что-то еще, слишком "странно", чтобы держать их в голове. Если вы попытаетесь написать один из них, вы все равно в конечном итоге будете реализовывать генератор парсера, просто чтобы оставаться в здравом уме.

Самым простым типом парсера для написания от руки является парсер рекурсивного спуска, который входит в семейство парсеров LL. большинство других типов синтаксического анализатора либо трудно писать вручную (парсеры LALR, которые используют большие таблицы перехода состояний), либо предназначены для синтаксического анализа сложных языков (например, парсеры Earley для синтаксического анализа естественных языков).

В Википедии есть хорошая информация о разборе рекурсивного спуска.

Попробуйте XText. Это вам. Создать свой язык, парсер и редактор быстро и легко

Это зависит от грамматики, которую вы пытаетесь использовать. У LL есть некоторые проблемы с неопределенностью в грамматике (вы должны будете сделать все, что осталось без рекурсии).

Если вы не можете решить, используйте LR(1) или LALR. Может быть, даже GLR.

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