Мне нужно написать парсер вручную. Невозможно выбрать между LL (*) и LR (возможно, попробуйте Эрли?). Должен ли я использовать восходящий синтаксический анализ, потому что грамматика для LL будет довольно сложной?Написание ручного парсера
ответ
Это зависит от грамматики, которую вы пытаетесь использовать. У LL есть некоторые проблемы с неопределенностью в грамматике (вам нужно сделать все оставлено без рекурсии).
Если вы не можете решить, перейдите к LR (1) или LALR. Может быть, даже GLR.
Простейший тип анализатора для записи вручную - это рекурсивный парсер спуска, который находится в семействе парсеров LL. большинство других типов парсера либо трудно писать вручную (LALR-парсеры, которые используют таблицы больших состояний), либо предназначены для синтаксического анализа сложных языков (таких как синтаксисы Эрли для анализа естественных языков).
wikipedia имеет хорошую информацию об анализе рекурсивного спуска.
Я бы пошел либо с помощью рекурсивного анализатора спуска, либо, может быть, с хвостовым рекурсивным парсером спуска (то есть LL) или с парсером с приоритетом оператора сверху вниз.
Семейство пар LR, будь то LR, LALR (k), LALR (1), GLR или что-то еще слишком «странное», чтобы держать вас в голове. Если вы попытаетесь написать один из них, вы, как правило, в конечном итоге внедряете генератор парсеров в любом случае, просто для того, чтобы оставаться в здравом уме.
О, бред. Я использую LALR с 1979 года без какой-либо необходимости реализовать собственный генератор парсера. – EJP
- 1. php: написание фигурного парсера
- 2. Написание парсера BibTex
- 3. Написание парсера с Wisent
- 4. Написание парсера для регулярных выражений
- 5. Написание парсера запросов в JavaScript
- 6. Написание парсера для строки JSON
- 7. Написание парсера для смешанных языков
- 8. Написание парсера для javascript-кода
- 9. Написание парсера для S-выражений
- 10. Написание парсера для формата двоичных сообщений
- 11. Написание официального парсера языка с Lisp
- 12. Написание общего метода для парсера Enum
- 13. Написание парсера (для языка разметки): Теория и практика
- 14. Написание простого простого парсера для Unity3d (C# или Actionscript)
- 15. Написание тестов для функций парсера файлов модульным способом
- 16. Написание парсера сценария командной строки для 3DS Max 2010
- 17. Почему репликатор парсера парсера отсутствует?
- 18. Генерация парсера
- 19. Прейскурант парсера
- 20. автоматизация ручного вещания
- 21. Ошибки ручного управления ajax
- 22. Codeigniter - создание ручного планировщика
- 23. UIGestures против ручного управления
- 24. Распознавание ручного знака
- 25. Редукция экземпляра ручного объекта
- 26. Обновление ручного результирующего кэша
- 27. Ручного расчета RandomForest() невязки
- 28. Написание простого парсера в Perl: с выходом lexer, куда идти дальше?
- 29. Objective C - Написание NSString на plist
- 30. Поиск парсера PDF-файла
Это зависит от того, на каком языке вы пытаетесь разобрать. Без дополнительной информации о вашей заявке невозможно дать какое-либо разумное предложение. Вы также можете посмотреть «связанные» вопросы (прокрутите вниз и посмотрите вправо). Здесь много вопросов о разборе и много хорошего обсуждения. –
Зачем вам нужно * написать парсер вручную? В этом, как правило, нет большой ценности. –
Я не могу использовать yacc или другие парсеры, где мой парсер будет работать – mystdeim