Курсовая работа: Розробка та реалізація компонентів системного програмного забезпечення

- сивол «:=» відділяє праву частину правила від лівої;

- сиволи «[», «]» означають необов’язковість (вираз в дужках може бути відсутнім);

- сиволи «{», «}» означають повторення.

< program> := «begіn » [{<block>}] «end »». »

<block> := <stmt> | «begіn » [{<block>}] [{<stmt>}] «end »

<stmt> := <declaratіon> | <const> | <operator>

<declaratіon> := <type> <іd> [{», » <іd>}]»; »

<const> := <іd> «= » <num> «; »

<operator> := <bіnd> | <іnop> | <outop> | <repeatop>

<bіnd> := <іd> «: » «= » <expr> «; »

<іnop> := «scanf »«( »<expr>«) » «; »

<outop> := «prіntf » «( » <expr>«) » «; »

<repeatop> := «repeat » <block> «untіl »«( »<expr>«) »; »

<type> := «float »

<іd> := <letter>[{<letter>|<number>}]

<num> := <number>[{<number>}]

<letter> := a|b|c|d|e|f|g|h|і|j|k|l|n|m|o|p|q|r|s|t|u|v|w|x|y|z| A|B|C|D|E|F|G|H|І|J|K|L|N|M|O|P|Q|R|S|T|U|V|W|X|Y|Z

<number> := 0|1|2|3|4|5|6|7|8|9

<expr> := <operand> [{<op> <operand>}]

<operand> :=» ( «<expr>») » | <num> | <іd> [«[ «<expr>»] »]

<op> := <grteq>

<іnv> := <logіcalop>| «* » | «/»

<logіcalop> := « » | «+ » | [<op>]

Формальний опис складено за допомогою 21-ого нетермінального виразу.

2.2 Розробка лексичного аналізатора

Основна задача лексичного аналізу – розбити вихідний текст, що складається з послідовності одиночних символів, на послідовність слів, або лексем, тобто виділити ці слова з безперервної послідовності символів. Всі символи вхідної послідовності з цієї точки зору розділяються на символи, що належать яким-небудь лексемам, і символи, що розділяють лексеми. В цьому випадку використовуються звичайні засоби обробки рядків. Вхідна програма проглядається послідовно з початку до кінця. Базові елементи, або лексичні одиниці, розділяються пробілами, знаками операцій і спеціальними символами (новий рядок, знак табуляції), і таким чином виділяються та розпізнаються ідентифікатори, літерали і термінальні символи (операції, ключові слова).

При виділенні лексеми вона розпізнається та записується у таблицю лексем за допомогою відповідного номера лексеми, що є унікальним для кожної лексеми із усього можливого їх набору. Це дає можливість наступним фазам компіляції звертатись лексеми не як до послідовності символів, а як до унікального номера лексеми, що значно спрощує роботу синтаксичного аналізатора: легко перевіряти належність лексеми до відповідної синтаксичної конструкції та є можливість легкого перегляду програми, як вгору, так і вниз, від текучої позиції аналізу. Також в таблиці лексем ведуться записи, щодо рядка відповідної лексеми – для місця помилки – та додаткова інформація.

При лексичному аналізі виявляються і відзначаються лексичні помилки (наприклад, недопустимі символи і неправильні ідентифікатори). Лексична фаза відкидає також і коментарі, оскільки вони не мають ніякого впливу на виконання програми, отже ж й на синтаксичний розбір та генерацію коду.

Лексичний аналізатор (сканер) не обов’язково обробляє всю програму до початку всіх інших фаз. Якщо лексичний аналіз не виділяється як окрема фаза компіляції, а є частиною синтаксичного аналізу, то лексична обробка тексту програми виконується по мірі необхідності по запиту синтаксичного аналізатора.

К-во Просмотров: 323
Бесплатно скачать Курсовая работа: Розробка та реалізація компонентів системного програмного забезпечення