Онлайн ресурсы для написания парсера-генератора - PullRequest
6 голосов
/ 01 сентября 2009

Я хочу написать генератор синтаксических анализаторов для образовательных целей, и мне было интересно, есть ли какие-нибудь хорошие онлайн-ресурсы или учебные пособия, которые объясняют, как их написать. Что-то вроде «Давайте построим компилятор» Джека Креншоу.

Я хочу написать генератор парсера для грамматики LR (1).

У меня хорошее понимание теории создания таблиц действий и переходов, но мне нужен какой-то ресурс, который поможет мне в его реализации.

Предпочтительными языками являются C / C ++, Java, хотя и другие языки в порядке.

Спасибо.

Ответы [ 4 ]

8 голосов
/ 01 сентября 2009

Я согласен с другими, книга Дракона - хороший фон для разбора LR.

Если вас интересуют парсеры с рекурсивным спуском, этот сайт очень интересен для изучения. Он поможет вам создать полностью автономную систему компиляции, которая может компилировать себя и другие языки:

Учебник по MetaII-компилятору

Все это основано на удивительной небольшой 10-страничной технической статье Вала Шорре: META II: синтаксически-ориентированный язык написания компиляторов от честного бога 1964 года. Я научился создавать компиляторы из этого еще в 1970-х. Есть потрясающий момент, когда вы, наконец, понимаете, как компилятор может сам себя восстановить ...

Я знаю автора веб-сайта с тех времен, когда я учился в колледже, но не имею никакого отношения к сайту.

2 голосов
/ 01 сентября 2009

Если вы хотите пойти по пути Python, я бы порекомендовал следующее.

Я считаю, что оба они чрезвычайно полезны, и Пол Макгуайр, автор pyparsing, превосходно помогает вам, когда вы сталкиваетесь с проблемами. Книга «Обработка текста в Python» - это просто полезный справочник, который всегда будет у вас под рукой, и поможет вам прийти к правильному настрою при попытке создания парсера.

Я бы также отметил, что ОО-язык лучше подходит в качестве механизма синтаксического анализа языка, потому что он расширяемый, и полиморфизм - верный способ сделать это (ИМХО). Если посмотреть на проблему с точки зрения конечного автомата, а не на «Ищите точку с запятой в конце xyz», то вы увидите, что ваш синтаксический анализатор в конце концов станет намного более устойчивым.

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

1 голос
/ 01 сентября 2009

Не совсем в сети, но Книга Дракона содержит довольно сложные обсуждения парсинга LR.

0 голосов
/ 29 октября 2011

Мне было легче научиться писать парсеры рекурсивного спуска, прежде чем научиться писать парсеры LR. Ну, честно говоря, после многих лет написания парсеров я никогда не считал необходимым писать парсер LR.

Недавно я написал учебное пособие в CodeProject под названием Реализация инструментов языка программирования в C # 4.0 , в котором описываются методы синтаксического анализа рекурсивного спуска.

...