Page 35 - 4761
P. 35
Таблиця 3.2 – Таблиця символьних імен
№ Символ Адреса Тип Інша
ім’я інформація
1 I int
2 Y int
3 X real
1
4 … … ... …
Таблиця 3.3 - Таблиця літералів
№ Літерал Адреса Тип Інша
інформація
1 1 int
2 8 int
3 100 int
4 ... ... ... ...
Результатом роботи сканера є послідовність кодів лексем, які представляють собою
послідовність коду таблиці (номер таблиці) і специфікатора. Специфікатор задає номер
рядка в таблиці, куди занесена лексема, що дозволяє уникнути додаткового пошуку по
таблицях на наступних етапах трансляції. Наприклад в результаті обробки рядка виду:
FOR I:=1 то 100 до Y:=X1
сканер формує наступну послідовність
<1,06><2,1><1,14><3,1><1,07><3,3> <1,08><2,2><1,14><2,3>
В кутових дужках пара чисел задає код таблиці і специфікатор. Додатково до
основної функції розпізнавання лексем сканер може виконувати читання рядків і друк
лістинга вихідної програми.
Функціонально в сканері можуть бути виділені наступні моделі:
1) виділення із вхідного рядка чергового слова;
2) пошук в таблицях лексем і визначення коду лексем;
3) формування і вивід вихідного рядка.
Для модуля, що виділяє слова важливою є інформація про те, які символи можуть
бути признаками початку і кінця символу. В мовах С, Pascal, Basic ключові слова
виділяються пробілами. По відношенню до ідентифікаторів задача їх виділення стає
складнішою оскільки символом розділювачем для них може бути будь-який символ, що
не підходить по визначенню в ідентифікатор або число при заповненні таблиць
здійснюється перевірка на наявність в ній елементу, що співпадає з виділеною константою
або ідентифікатором (при наявності такого елементу повторне занесення в таблицю не
відбувається). Завданням останнього модуля є занесення у вихідний рядок кодів
виявлених лексем.
Алгоритм роботи. Першою задачею реалізації алгоритму є розбивка вхідного
рядка на лексеми.
Другою – заповнення відповідних таблиць. Традиційно речення вхідної програми,
що складається з лексичних одиниць розділені символами розділювачами: , ; знаки
операцій ( [ ) ].
Розпізнавання ідентифікаторів і літералів виконується на основі правил мови. Після
виділення лексеми здійснюється перевірка на наявність її в таблиці. При її наявності у
вихідний рядок записується пара чисел: номер рядка в таблиці і „0” якщо лексема не
виявлена в таблиці, то вона класифікується, як можливий ідентифікатор. Після того як
вона класифікована як можливий ідентифікатор здійснюється пошук в таблиці
33