Где я могу изучить основы написания лексера? - PullRequest
64 голосов
/ 02 июня 2011

Я хочу научиться писать лексер. У моего университетского курса было задание, в котором мы должны были написать синтаксический анализатор (и лексер, чтобы согласиться с ним), но это было дано нам без каких-либо инструкций или обратной связи (за пределами оценки), поэтому я не многому научился из этого.

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

На данном этапе меня не интересуют лучшие практики или методы оптимизации, но я предпочитаю сосредоточиться на самом главном. Какие хорошие ресурсы помогут мне начать?

Ответы [ 2 ]

57 голосов
/ 02 июня 2011

По сути, есть два основных подхода к написанию лексера:

  1. Создание рукописного, в этом случае я рекомендую это небольшое руководство .
  2. Использование некоторых инструментов генератора лексеров, таких как lex .В этом случае я рекомендую прочитать учебные пособия для конкретного выбранного инструмента.

Также я хотел бы рекомендовать учебное пособие Kaleidoscope из документации LLVM ,Он проходит через реализацию простого языка и, в частности, демонстрирует, как написать небольшой лексер.Существует учебник на языке C ++ и Objective Caml.

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

9 голосов
/ 02 июня 2011

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

...