Как написать парсер LALR для некоторой грамматики в Java? - PullRequest
2 голосов
/ 23 марта 2011

Я хочу написать код Java для создания синтаксического анализатора LALR для моей грамматики. Кто-нибудь может предложить какие-нибудь книги или ссылки, где я могу научиться писать код Java для парсера LALR?

Ответы [ 4 ]

3 голосов
/ 23 марта 2011

Написание парсера LALR вручную сложно, но он может это сделать.Если вы хотите изучить теорию создания парсеров для них вручную, подумайте о том, чтобы изучить «Методы синтаксического анализа: практическое руководство» Груна и Джейкобса.Это отличная книга по общим методам синтаксического анализа, и глава о синтаксическом анализе LR особенно хороша.

Если вас больше интересует просто получение анализатора LALR, написанного на Java, подумайте о Java CUP, которыйявляется генератором парсера общего назначения для Java.

Надеюсь, это поможет!

1 голос
/ 27 марта 2011

Как уже говорилось, вы всегда будете использовать генератор парсера для создания парсера LALAR.Вот несколько таких инструментов для Java:

1 голос
/ 27 марта 2011

Функциональность LALR можно разделить на две части: подготовку таблиц и анализ входных данных.

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

Вторая часть состоит из потребления этих таблиц с использованием некоторых довольно простых алгоритмов для токенизации и обработки входных данных в синтаксический анализ / конкретный синтаксисдерево.Это проще реализовать самостоятельно, если вам нравится это делать, и вы по-прежнему имеете полный контроль над тем, как он работает и что он делает.

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

0 голосов
/ 04 мая 2017

Хочу только упомянуть, что мой проект CookCC (http://coconut2015.github.io/cookcc/) - это LALR (1) парсер + Lexer (очень похоже на flex).

Уникальная особенность CookCC заключается в том, что вы можете написатьВаш лексер и парсер в Java с использованием аннотаций Java.Смотрите пример калькулятора здесь: https://github.com/coconut2015/cookcc/blob/master/tests/javaap/calc/Calculator.java

...