Разбор, где я могу узнать об этом - PullRequest
17 голосов
/ 29 августа 2008

Мне дали задание «переводить» один язык на другой. Источник слишком гибкий (сложный) для простого построчного подхода с регулярным выражением. Куда я могу обратиться, чтобы узнать больше о лексическом анализе и парсерах?

Ответы [ 12 ]

12 голосов
/ 29 августа 2008

Если вы хотите проявить «эмоциональность» к предмету, возьмите копию « The Dragon Book ». Это обычно текст в курсе дизайна компилятора. Он определенно удовлетворит вашу потребность "узнать больше о лексическом анализе и парсерах", а также кучу других забавных вещей!

IMH (umble) O, спаси себе руку и / или ногу и купи старую версию - она ​​исполнит твои информационные желания.

8 голосов
/ 29 августа 2008

Попробуйте ANLTR :

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

Для этого есть книга .

alt text

5 голосов
/ 29 августа 2008

Книга Никлауса Вирта "Создание компилятора" (доступна в виде бесплатного PDF) http://www.google.com/search?q=wirth+compiler+construction

2 голосов
/ 24 октября 2008

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

(a) Рассматривали ли вы посещение школы с достойной учебной программой CS?
(b) Есть много онлайн-лекций, таких как Открытое программное обеспечение MIT . В разделе EE / CS есть много курсов, которые касаются синтаксического анализа, хотя я не вижу ни одного курса по синтаксическому анализу как такового. Обычно он вводится в качестве одного из первых теоретических курсов, поскольку классификация языков и автоматов лежит в основе большей части теории CS.

2 голосов
/ 29 августа 2008

Я недавно работал с PLY , который является реализацией lex и yacc в Python. С ним довольно легко начать работу, и в документации есть несколько простых примеров.

Разбор может быстро стать очень технической темой, и вы обнаружите, что вам, вероятно, не понадобится знать все детали алгоритма синтаксического анализа, если вы используете конструктор парсера, такой как PLY.

1 голос
/ 26 октября 2008

Техника синтаксического анализа - Практическое руководство Дик Грун и Цериэль Дж. Х. Джейкобс

Эта книга (свободно доступная в формате PDF) дает обширный обзор различных методов / алгоритмов синтаксического анализа. Если вы действительно хотите понять различные алгоритмы синтаксического анализа, этот IMO является лучшим справочником, чем Книга Дракона (так как Техника синтаксического анализа полностью фокусируется на синтаксическом анализе, тогда как Книга Дракона рассматривает синтаксический анализ только как одну, хотя и важную, часть процесса построения компилятора) .

1 голос
/ 24 октября 2008

Пройдя (довольно) несколько классов компиляторов, я использовал The Dragon Book и C & T . Я думаю, что C & T гораздо лучше справляется с конструкцией компилятора. Не брать ничего из Книги Дракона, но я думаю, что C & T - гораздо более практичная книга.

Кроме того, если вам нравится писать на Java, я рекомендую использовать JFlex и BYACC / J для ваших потребностей в лексинге и разборе.

1 голос
/ 30 сентября 2008

Я нашел этот сайт полезным:

Учебник для начинающих Lex и YACC / HOWTO

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

1 голос
/ 19 сентября 2008

Еще один учебник для рассмотрения - Прагматика языка программирования . Я предпочитаю это книге Дракона, но YMMV.

Если вы используете Perl, стоит рассмотреть еще один инструмент: Parse :: RecDescent .

Если вам просто нужно сделать этот перевод один раз и ничего не знать о технологии компиляции, я бы посоветовал вам сделать как можно больше с некоторыми довольно упрощенными переводами, а затем исправить это вручную. Да, это много работы. Но это меньше работы, чем изучение сложного предмета и поиск правильного решения для одной работы. Тем не менее, вы все равно должны изучить предмет, но не позволяйте, не зная, что это будет препятствием для завершения вашего текущего проекта.

1 голос
/ 29 августа 2008

Lexing / Parsing + проверка типов + генерация кода - отличное упражнение для CS. Я бы порекомендовал его всем, кто хочет иметь прочную основу, так что я полностью за Dragon Book

...