Languages_grammars_recognizers - Страница 11
Глава 1. Лексикален анализ
Фиг.0.1. Опростен модел на компилатор
отговорен) y . Въпреки това, дори когато използвате такива програми
¾ръчната¿ фина настройка на компилатора все още е незаменима и прилагането й изисква добро познаване на това как и защо работят различните методи за анализ.
Глава 1. Лексикален анализ
Част 2. Лексикален и синтактичен анализ
видове. Програмата, трансформирана от лексикалния анализатор, вече не е верига в оригиналната азбука, а в азбуката на лексемите.
Ÿ 1. Основни понятия на лексикалния анализ
Да приемем, че входът на компилатора е веригата
ако a13>2300 тогава ab12:=1400
На етапа на анализиране не е важно дали има променлива вляво от знака за неравенство, чието име е последователност от буква и две цифри, а само че е идентификатор. По същия начин няма значение, че числото 2300, а не 2301 е отдясно на знака за неравенство, а само че е числова константа. В този пример анализаторът ще извлече осем токена: ключовата дума if, идентификаторът a13, знакът за неравенство > , цяло число 2300, ключова дума then , идентификатор ab12 , оператор за присвояване := и цяло число 1400 (приемайки
белите нямат значение). Всеки токен принадлежи към определен клас токени. Токените от един и същи клас са неразличими от гледна точка на анализатора (както например идентификаторите a13 è ab12 ). Клас от токени се нарича токен. Така
Така горният низ от 27 знака ще бъде преобразуван в низ от 8 токена. Имайте предвид, че всяка ключова дума формира свой собствен клас лексеми, състоящ се от тази една дума.
Токените са описани от шаблони, катокоито най-често използват регулярни изрази или подобни конструкции. В табл. 1.1 показва примери за токени, лексеми и модели (регулярните изрази è са дадени в част 1, Ÿ 8).
Шаблоните обикновено използват разширен синтаксис на регулярен израз за удобство. Тъй като азбуката е линейно подредена
децата, изброени чрез алтернативния знак j, често образуват интервали. Използва се тире за запис на интервал: a - z 0 - 9 вместо a b . . . z0. . . 9. В допълнение, за регулярния израз r, вместо rr, обикновено се пише r + и вместо r j " (r) ?. Като се има предвид това, моделите на токени id è num могат да бъдат записани като
y Разширените регулярни изрази са един от основните синтактични елементи на езика Perl. Името „регулярни изрази“ обаче е много условно там, тъй като не всички разрешени за използване операции могат да бъдат изразени чрез обединение, умножение и итерация. В резултат на това класът от езици, дефиниран от такива изрази, е много по-широк от класа на обикновените езици.