Languages_grammars_recognizers - Страница 11

languages_grammars_recognizers

Глава 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. Името „регулярни изрази“ обаче е много условно там, тъй като не всички разрешени за използване операции могат да бъдат изразени чрез обединение, умножение и итерация. В резултат на това класът от езици, дефиниран от такива изрази, е много по-широк от класа на обикновените езици.