2010-11-23 2 views
0

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

+2

Это зависит от того, на каком языке вы пытаетесь разобрать. Без дополнительной информации о вашей заявке невозможно дать какое-либо разумное предложение. Вы также можете посмотреть «связанные» вопросы (прокрутите вниз и посмотрите вправо). Здесь много вопросов о разборе и много хорошего обсуждения. –

+0

Зачем вам нужно * написать парсер вручную? В этом, как правило, нет большой ценности. –

+0

Я не могу использовать yacc или другие парсеры, где мой парсер будет работать – mystdeim

ответ

0

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

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

0

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

+0

Это выглядит очень интересно, спасибо – mystdeim

+0

Я пробовал, и я тоже был очень впечатлен: D –

0

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

wikipedia имеет хорошую информацию об анализе рекурсивного спуска.

2

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

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

+0

О, бред. Я использую LALR с 1979 года без какой-либо необходимости реализовать собственный генератор парсера. – EJP

Смежные вопросы