Написание части компилятора (написанного на c ++) на Perl - PullRequest
3 голосов
/ 21 марта 2011

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

На данный момент я пытаюсь понять и реализовать лексер для моего языка, и мне нужны регулярные выражения.

Я привык довольно быстро писать сценарии регулярного выражения Perl, и я подумал, что я мог бы встроить Perl в свой лексер C ++ . Теперь вопросы:

  • Это вызовет тяжелые накладные расходы?
  • Стоит ли пытаться помириться с BOOST (или с любой другой библиотекой c ++, хорошо, gor regex)?

Спасибо, что прочитали это:)

Ответы [ 4 ]

8 голосов
/ 21 марта 2011

Встраивание Perl в ваш проект только для выполнения регулярных выражений - это все равно, что пытаться вставить слона в Miata, чтобы получить больше места в багажнике.(Ошибка!)

Повышение может быть одним из способов обработки регулярных выражений, или если вы пишете в среде, поддерживающей POSIX.2, посмотрите на функции regcomp(), regexec() и regfree().

После того, как вы написали свой собственный лексер, исследуйте инструмент под названием lex, который в значительной степени является золотым стандартом для разработки лексических анализаторов.У него есть партнер под названием YACC для разработки парсеров.Оба проверены временем и генерируют жесткий, без ошибок код.(Среды GNU-ish называют эти программы flex и bison.)

6 голосов
/ 21 марта 2011

Нет причин, по которым вы не можете этого сделать, это значит, что хороший программист использует правильный инструмент для работы, а perl ОЧЕНЬ хорош в обработке текста.

Однако вместо того, чтобы думать о наборе perl-на основе лексера в ваш компилятор C ++ (написанный на C ++, я надеюсь, что он не компилируется на C ++), вам следует подумать о написании модуля perl на C ++ и о том, чтобы позволить драйверу компилятора писать на perl, выполнять лексинг, заполнять структуры данных изатем вызовите функции модуля C ++ для завершения компиляции.

3 голосов
/ 21 марта 2011

Если вам действительно нужны регулярные выражения в стиле Perl, загляните в библиотеку libpcre .Он очень хорошо протестирован, очень переносим, ​​и по моему опыту с ним легко работать.Рекомендуемое программное обеспечение.(И, вероятно, уже на вашей машине.:)

1 голос
/ 21 марта 2011

Смотрите в нижней части "Что хорошего в \ G в регулярном выражении?" раздел perlfaq6. Он описывает, как // gc можно использовать для создания токенизатора, известного как лексер.

...