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

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

Ответы [ 12 ]

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

flex и bison - это новые lex и yacc. Синтаксис для BNF часто выводится за то, что он немного тупой. По этой причине некоторые переехали в АНТЛР и Рагель.

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

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

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

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

...