Де я можу навчитися основам написання лексеру?


86

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

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

На цьому етапі мене насправді не цікавлять найкращі практики чи методи оптимізації, а натомість я віддаю перевагу зосередженню на найнеобхіднішому. Які хороші ресурси для початку роботи?

Відповіді:


73

В основному існує два основних підходи до написання лексеру:

  1. Створення рукописного, і в цьому випадку я рекомендую цей невеликий підручник .
  2. Використання деяких інструментів генератора lexer, таких як lex . У цьому випадку я рекомендую прочитати навчальні посібники з певного інструменту на вибір.

Також я хотів би порекомендувати підручник з калейдоскопу з документації LLVM . Він проходить через реалізацію простої мови і зокрема демонструє, як писати невеликий лексер. Існує версія підручника на C ++ та Objective Caml.

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


4
Підручник з калейдоскопу для мене справді відповів на це запитання.
Роберт Байерс

Докладніше про написання синтаксичного аналізатора LL (1) див. Цю відповідь .
jchook

12

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


5
+1 до книги "Дракон". БАГАТО навчився у нього, коли навчався в університеті. Так, там багато чого, але якщо ви дійсно зацікавлені у розробці та реалізації компілятора, це чудовий ресурс.
DarinH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.