Разбор, где я могу узнать об этом

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

Ответ 1

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

IMH (umble) O, сэкономить руку и/или ногу и купить старое издание - оно заполнит ваши информационные пожелания.

Ответ 2

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

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

Здесь также есть книга.

alt text

Ответ 4

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

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

Ответ 5

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

(a) Рассматривали ли вы посещение школы с достойной учебной программой?

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

Ответ 6

Если вы предпочитаете Java-инструменты, компилятор Java Compiler, JavaCC, является хорошим парсером/сканером. Он управляется конфигурационным файлом и генерирует Java-код, который вы можете включить в свою программу. Я не использовал его пару лет, поэтому я не знаю, как выглядит текущая версия. Вы можете узнать больше здесь: https://javacc.dev.java.net/

Ответ 7

flex и bison - это новые лекс и yacc. Синтаксис для BNF часто высмеивается за то, что он немного тупой. По этой причине некоторые из них переехали в ANTLR и Ragel.

Если вы не делаете много перевода, вы можете сделать одноразовое использование многострочных регулярных выражений с помощью Perl или Ruby. Написание совместимой грамматики BNF для существующего языка не является задачей, которую нужно воспринимать легкомысленно.

С другой стороны, вполне возможно использовать любые файлы языка .l и .y, если они доступны как с открытым исходным кодом. Затем вы можете создать новый код из существующего дерева синтаксического анализа.

Ответ 8

Lexing/Parsing + typecheck + генерация кода - отличное упражнение по CS, я бы рекомендовал его всем, кто хотел бы прочную основу, поэтому я все для Книги Дракона.

Ответ 9

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

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

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

Ответ 10

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

Лекс и YACC-праймер/HOWTO

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

Ответ 11

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

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

Ответ 12

Методы анализа - Практическое руководство Диком Грюном и Церелем Ж.Х. Джейкобс

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