2 квітня
= 2 квітня
id 2 лютого; 1 квітня
write 11 Січень
( 9 квітня
id 2 червня) 10 Квітня ; 1 квітня
end 12 січня. 13 квітня Таблиці ключових слів і роздільників - статичні, таблиці ідентифікаторів і констант заповнюються в процесі лексичного і синтаксичного аналізу.
Статичні таблиці лексем
1. Таблиця ключових слов4. Таблиця разделителей1program1;2const2=3var3,4integer4:5char5[6string6]7begin7:=8repeat8<=9until9(10read10)11write11*12end12+13and13.14label14<15type15>16readln16>=17writeln17<>18goto18/19if19.20then21else22length23concat24replace25pos26StrChar27copy28Same29or30not
4. Синтаксичний аналізатор
На етапі синтаксичного аналізу виконується перевірка синтаксичної коректності вихідної програми, представленої у вигляді потоку токенів і сукупності таблиць, і перетворення її в деяку внутрішню форму, зручну в подальшому для генерації об'єктного коду.
Опишемо порядок дій, виконуваних при розробці синтаксичного аналізатора.
.1 Побудова КС-граматики вхідної мови
Для побудови КС-граматики вхідної мови необхідно:
1. Замінити металінгвістіческая змінні БНФ позначеннями нетермінальних символів, використовуючи короткі імена;
2. В якості термінальних символів використовувати токени;
. Металингвистический символ «: =» замінити символом «? »;
. Замінити одну металінгвістіческая формулу з n альтернативами на n правил граматики з однаковим символом в лівій частині правила виводу;
. Виключити металінгвістіческая символи [] і {} , включивши в правила граматики e-правила і рекурсивні правила.
Отримана граматика повинна бути граматикою простого передування.
Граматика простого передування
Синтаксичний аналіз, заснований на простому передування, використовує для виділення основи правовиводімой ланцюжка?? w три відносини передування (<), (=) і (>) наступним чином:
· якщо?- Основа, то між усіма суміжними символами ланцюжка? виконується або відношення (<), або (=);
· між останнім символом ланцюжка? і першим символом ланцюжка? виконується відношення (<);
· між суміжними символами основи виконується відношення (=);
· між останнім символом ланцюжка? і першим символом ланцюжка w виконується відношення (>).
Очевидно, що правий кінець основи правовиводімой ланцюжка граматики простого передування можна виділити, переглядаючи цей ланцюжок зліва направо до тих пір, поки вперше не зустрінеться відношення (>). Для знаходження лівого кінця основи треба переглянути її назад, поки не зустрінеться відношення (<). Ланцюжок, укладена між відносинами (<) і (>), буде основою. Якщо граматика є оборотною, тобто не містить правил з однаковою правою частиною, то основу можна однозначно згорнути. Цей процес продовжується до тих пір, поки вхідна ланцюжок не зг...