9. Формиране на таблици с лексеми и изграждане на дескрипторния текст на изходната програма.
Нека разгледаме конкретен пример. Нека ни бъде дадена програма на някакъв алгоритмичен език
Нека използваме следните кодове за типове токени:
K1 - ключова дума;
Лексикалният анализ може да се извърши, ако ни бъде дадена азбука,
списък с езикови ключови думи и служебни символи. Нека всичко
на разположение. Тогава вътрешните таблици на скенера ще приемат следния вид.
Таблица 1. Ключови думи.
Таблица 2. Разделители.
Резултатът от работата на скенера е таблица с идентификатори и таблица с константи
Таблица 4. Константи.
Въз основа на компилираните таблици можете да напишете входния текст чрез въведените дескриптори (дескрипторен текст):
( K1, 6) (K3, 2) (K2, 2) (k3, 3) ( K2, 2) (K3, 4) ( K2, 7) (K1, 5) (K2, 1)
( K3, 2) (K2, 7) (K2, 8) (K4, 1) (K2, 1)
( K3, 3) (K2, 7) (K2, 8) (K4, 2) (K2, 1)
( K3, 4) (K2, 7) (K2, 8) (K3, 2) (K2, 3) (K3, 3) (K2, 1)
10. Синтактичен анализ. Метод на рекурсивно спускане.
Граматиката на алгоритмичния език може да бъде специфицирана под формата на диаграми на Wirth, форми на Backus-Naur и под формата на формална граматика. Формалните граматики са за предпочитане, тъй като се използват широко както на теория, така и на практика при разработването и конструирането на транслатори от езици за програмиране.
Формалната граматика е набор от четири обекта: набор от нетерминални символи, набор от терминални символи, набор от продукции
и аксиомите на граматиката S, от които всички максими и изречения на дадения език могат да бъдат изведени с помощта на продукции.
11. Пример за граматиката на опростения език Паскал.
Езикова азбука, латински символи и служебни символи. Нека във формалната граматика на опростения Паскал всички нетерминални символиса затворени в ъглови скоби, крайните знаци са малки латински и служебни знаци, към които добавяме знаци за аритметични операции +, -, *, div и скоби ( ), които се използват и като разделители. Първата продукция е аксиома на езика.
Това всъщност е оригиналният запис и е и продукцията. Други продукти ще изглеждат така: