




Недавно я работал с PLY, который представляет собой реализацию lex и yacc в Python. Начать с ним довольно легко, и в документации есть несколько простых примеров.
Синтаксический анализ может быстро превратиться в очень техническую тему, и вы обнаружите, что вам, вероятно, не нужно знать все детали алгоритма синтаксического анализа, если вы используете конструктор парсеров, такой как PLY.
Если вы предпочитаете инструменты на основе Java, компилятор Java Compiler Compiler, JavaCC, будет хорошим парсером / сканером. Он управляется файлом конфигурации и генерирует java-код, который вы можете включить в свою программу. Я не использовал его пару лет, поэтому не уверен, какая у меня текущая версия. Вы можете узнать больше здесь: https://javacc.dev.java.net/
Если вы хотите "эмоционально" рассказать о предмете, возьмите копию "Книга Дракона". Это обычно текст в курсе проектирования компилятора. Это определенно удовлетворит вашу потребность «узнать больше о лексическом анализе и парсерах», а также множество других вещей, связанных с весело!
IMH (umble) О, сэкономьте себе руку и / или ногу и купите более старую версию - она удовлетворит ваши информационные желания.
правда @Ostati? Я четко заявляю, чтобы сэкономить деньги и купить более старую версию ... или не экономить деньги, а купить текущую.
Мэтт, мне потребовалось время, чтобы выяснить, какая версия была какой. Но был ваш ответ, за который я, кстати, проголосовал, ISBN ... в любом случае, я взял книгу и начал свое путешествие. Спасибо.
flex и bison - это новые lex и yacc. Синтаксис BNF часто высмеивают за то, что он немного тупой. Некоторые перешли на ANTLR и Ragel по этой причине.
Если вы не делаете много переводов, вы можете выполнить одноразовый перевод, используя многострочные регулярные выражения с Perl или Ruby. Написание совместимой грамматики BNF для существующего языка - непростая задача.
С другой стороны, вполне возможно использовать файлы .l и .y любого заданного языка, если они доступны в виде открытого исходного кода. Затем вы можете построить новый код из существующего дерева синтаксического анализа.
Lexing / Parsing + typecheck + code generation - отличное упражнение в CS, я бы порекомендовал его всем, кому нужна прочная основа, поэтому я полностью за Dragon Book
Книга Никлауса Вирта "Конструкция компилятора" (доступна в виде бесплатного PDF-файла) http://www.google.com/search?q=wirth+compiler+construction
Еще один учебник, который стоит рассмотреть, - это Прагматика языка программирования. Я предпочитаю это книге Дракона, но YMMV.
Если вы используете Perl, следует рассмотреть еще один инструмент - Parse :: RecDescent.
Если вам просто нужно сделать этот перевод один раз и вы ничего не знаете о технологии компиляции, я бы посоветовал вам продвинуться как можно дальше с некоторыми довольно упрощенными переводами, а затем исправить это вручную. Да, это большая работа. Но это меньше работы, чем изучение сложного предмета и кодирование правильного решения для одной работы. Тем не менее, вы все равно должны изучить предмет, но не позволяйте незнанию этого стать препятствием на пути к завершению вашего текущего проекта.
Я нашел этот сайт полезным:
В первый раз я использовал lex / yacc для относительно простого проекта. Этот урок был всем, что мне действительно нужно. Когда позже я подошел к более сложным проектам, знакомство с этим учебником и простым проектом позволило мне создать что-то более интересное.
Взяв (довольно) несколько классов компилятора, я использовал как Книга Дракона, так и C&T. Я думаю, что C&T гораздо лучше справляется с задачей сделать конструкцию компилятора удобоваримой. Не отрываясь от «Книги драконов», я думаю, что C&T - гораздо более практичная книга.
Кроме того, если вам нравится писать на Java, я рекомендую использовать JFlex и BYACC / J для ваших нужд лексирования и синтаксического анализа.
Многие люди рекомендовали книги. Для многих они гораздо более полезны в структурированной среде с заданиями, сроками выполнения и т. д. Даже если нет, то представление материала по-другому может очень помочь.
(а) Думали ли вы о том, чтобы пойти в школу с приличной учебной программой по CS?
(б) Есть много онлайн-лекций, таких как Открытые курсы MIT. В их Раздел EE / CS есть много курсов, которые касаются синтаксического анализа, хотя я не вижу ничего о синтаксическом анализе как таковом. Обычно он вводится как один из первых теоретических курсов, поскольку классификация языков и автоматы лежат в основе большей части теории CS.
+1 для mit's ocw, я все время использую его для математики. По какой-то причине пойти на занятия по МОЕМУ расписанию намного лучше, чем вставать в 6:30.
Методы синтаксического анализа - Практическое руководство Авторы Дик Грюн и Кериэль Дж. Джейкобс
Эта книга (в свободном доступе в формате PDF) дает обширный обзор различных методов / алгоритмов синтаксического анализа. Если вы действительно хотите понять различные алгоритмы синтаксического анализа, этот IMO является лучшим справочником, чем Dragon Book (поскольку методы синтаксического анализа полностью сосредоточены на синтаксическом анализе, в то время как Dragon Book охватывает синтаксический анализ только как одну, хотя и важную, часть процесса создания компилятора) .
Я исправил ссылку: актуальный PDF (для первой редакции) можно скачать здесь: dickgrune.com/Books/PTAPG_1st_Edition/BookBody.pdf; новое издание и более обширное издание книги теперь также доступно на Amazon.
Мэтт, существует 3 издания, поэтому, пожалуйста, добавьте ISBN для того, которое вы предлагаете, или улучшите свои комментарии с помощью ISBN всех книг и скажите пару слов о каждой.