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

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

Розбір призначений для доказу того, що аналізований вхідний ланцюжок, записаний на вхідній стрічці, належить або не належить безлічі ланцюжків породжуваних граматикою даної мови. Виконання синтаксичного розбору здійснюється розпізнавачами, тому даний процес також називається розпізнаванням вхідного ланцюжка. Мета доказу в тому, щоб відповісти на питання: чи належить аналізований ланцюжок безлічі правильних ланцюжків заданої мови. Відповідь «так» дається, якщо така приналежність встановлена. Інакше дається відповідь «ні». Отримання відповіді «ні» пов'язано з поняттям відмови. Єдина відмова на будь-якому рівні веде до загальної відмови.

Щоб одержати відповідь «так» щодо всього ланцюжка, треба його одержати для кожного правила, що забезпечує розбір окремого підланцюжка. Оскільки безліч правил утворюють ієрархічну структуру, можливо з рекурсіями, то процес отримання загальної позитивної відповіді можна інтерпретувати як збір за певним принципом відповідей для листків, що лежать в основі дерева розбору, що дає позитивну відповідь для вузла, що містить цей листок. Далі аналізуються оброблені вузли, і вже в них одержані відповіді складаються в загальну відповідь нового вузла. І так далі до самої вершини. Даний принцип обробки сильно нагадує бюрократичну систему, використовувану в організаційному управлінні будь-якого підприємства. Так підіймається вгору інформація, підтверджуюча виконання вказівки начальника організації. До цього, тими ж шляхами, вниз спускалася і розділялася початкова вказівка.

Основним завданням семантичного аналізатора є перевірка типів. Також семантичний аналізатор повинен знаходити вирази, що використовуються без присвоєння та видавати попередження.

Сама програма перевірки типів базується на інформації про синтаксичні конструкції мови, представлення типів і правилах присвоєння типів конструкціям мови.

3.7 Розробка дерев граматичного розбору

Коренем дерева є не термінальний символ <Program >. Безпосередньо його листками є термінал Program та нетермінали <Blok >, <Declaration >, <Ident >. Листками нетерміналу <Blok > є термінали Start і Finish та нетермінали <Statement >, <Equation >, з листком <Cycle > існує двосторонній зв’язок. Нетермінал <Declaration > має термінальний листок Var та нетермінальний <Type > (листки Integer і Bool ) і зв’язок з нетерміналом <Ident >. <Ident > має три листки – <Small _ letter >, <Big _ letter > і <Number >. <Statement > має два листки – <Input > (листок Input ) і <Output > (листок Output ) і зв’язок з нетерміналом <Equation >. <Equation > має зв’язок з нетерміналом <Ident >, нетермінальні листки <Compare >, <Const >, <Operation _ a >, <Operation _ m >, <Operation _ l > і термінальний листок»:=». <Cycle > має два термінальні листки – For і DownTo і нетермінальний – <Const >. Від <Const > відходять два зв’язки, один до нетерміналу <Number >, другий до термінального символу» –». <Compare > має чотири термінальні листки – «==», "!=», «Le» і «Ge». <Operation _ a > має листки «+»,» –»; <Operation _ m > має листки «Mul», «Div» і «Mod». <Operation _l > має листки»!!», «And» і «||». Листками нетерміналу <Small_letter > є усі малі літери латинської абетки, <Big _ letter > – великі літери латинської абетки. <Number > має десять термінальних листків – «0», «1», «2», «3», «4», «5», «6», «7», «8», «9».

Дерево граматичного розбору розроблено згідно правил, даних у формі розширеної нотації Бекуса-Наура, та оформлено згідно правил ЄСКД. Граф схема дерева граматичного розбору (1 аркуш) міститься в додатках.

3.8 Розробка граф-схеми алгоритму

Другий блок описує частину програми, де з таблиці лексем вибирається чергова лексема. Далі лексема проходить перевірку на її приналежність до одного з класів. В третьому блоці перевіряється чи належить лексема до класу лексем блоку. Якщо так, то вибираються лексеми, що стоять до і після заданої і ланцюжок перевіряється на коректність. Такий алгоритм роботи усіх ділянок програми, на які описані блоками 4, 6, 8, 10, 12, 14, 16, 18, 20, 22. У таблиці наведено усі перевірки, що ведуть до розгалуження алгоритму.

Таблиця 3.1. Блоки галуження

Номер блоку

Перевірка, що здійснюється

3

Лексема блоку?

5

Лексема вводу / виводу?

7

Лексема присвоєння?

9

Лексема математичного, логічного, порівняльного оператора?

11

Лексема ідентифікатор?

13

Лексема циклу?

15

Лексема оголошення?

17

Лекскма аргументу виводу?

19

Синтаксична лексема?

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