42368

Побудова синтаксичного аналізатора

Лабораторная работа

Информатика, кибернетика и программирование

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

Украинкский

2014-09-23

198.5 KB

7 чел.

Міністерство освіти і науки, молоді та спорту України

Національний Технічний університет України «КПІ»

Кафедра АПЕПС

Лабораторна робота №2

з курсу Лінгвістичне забезпечення САПР

на тему: «Побудова синтаксичного аналізатора»

Виконав

студент 3-го курсу ТЕФ

групи ТР-91

Лисий А.І.

Перевірила

Третяк В.А.

Київ – 2011


Вступ

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


  1.  Виконання лабораторної роботи

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

  1.  Граматика заданої мови програмування

Початкова граматика:

  1.  <програма>::= program <id>; var <спис. огол> main{<спис. опер>}
  2.  <спис. огол>::=<огол.>; <спис. огол>|<огол.>;
  3.  <огол.>::=<тип>:<спис. id>;
  4.  <тип>::=double | int 
  5.  <спис. опер>::=<оператор>;|<оператор>;<спис. опер>
  6.  <оператор>::=<цикл> | <ум. оп> | <ввід> | <вивід> | <присвоєння>
  7.  <цикл>::=for(<id>=<вираз>;<лог. вираз>;<id>=<вираз>)<оператор>
  8.  <ум. оп>::=if (<відношення>) {<спис. опер>}
  9.  <ввід>::=read(<спис. id>)
  10.  <вивід>::=write(<спис. id>)
  11.  <присвоєння>::=<id>=<вираз>
  12.  <вираз>::=<додан.> |<вираз>+<додан.> | <вираз>-<додан.>
  13.  <додан.> ::=<множн.>|<додан.>*<множн.> |<додан.>/<множн.>
  14.  <множн.> ::= <конст> | (<вираз>) | <id>|-<вираз>
  15.  <конст>::=<цбз>|<цбз>.|<цбз>.<цбз>
  16.  <цбз>::=<цифра>|<цбз><цифра>
  17.  <цифра>::= 0 |…| 9
  18.  <спис. id>::=<id>|<спис. id>,<id>
  19.  <id>::=<буква>|<id><буква>|<id><цифра>
  20.  <буква>::=a |…| Z
  21.  <відношення>::=<вираз><знак><вираз>
  22.  <знак>::= > | < | >= | <= | == | !=
  23.  <лог. вираз>::=<лог. множ>|<лог. вираз> && <лог. множ>
  24.  <лог. множ.> ::= <лог. додан.> | <лог. вираз> || <лог. додан.>
  25.  <лог. додан.>::= <лог. од.> | !<лог. од.> | [<лог. вираз>]
  26.  <лог. од.> ::= <відношення> | true | false |

Перетворена граматика:

  1.  <програма>::= program id> var <спис. огол> main{<спис. опер>}
  2.  <спис. огол>::=<огол.>;{<огол.>;}
  3.  <огол.>::=<тип>:<спис. id>;
  4.  <тип>::=double | int 
  5.  <спис. id>::=id{,id}
  6.  <спис. опер>::=<оператор>;{<оператор>;}
  7.  <оператор>::=<цикл> | <ум. оп> | <ввід> | <вивід> | <присвоєння>
  8.  <цикл>::=for(<присвоєння>;<лог. вираз>;<присвоєння>)<оператор>
  9.  <ум. оп>::=if (<відношення>) {<спис. опер>}
  10.  <ввід>::=read(<спис. id>)
  11.  <вивід>::=write(<спис. id>)
  12.  <присвоєння>::=id=<вираз>
  13.  <вираз>::=<додан.> {+<додан.> | -<додан.>}
  14.  <додан.> ::=<множн.> {*<множн.> | /<множн.>}
  15.  <множн.> ::= con | id | (<вираз>) |-<вираз>
  16.  <відношення>::=<вираз><знак><вираз>
  17.  <знак>::= > | < | >= | <= | == | !=
  18.  <лог. вираз>::=<лог. множ> { && <лог. множ>}
  19.  <лог. множ.> ::= <лог. додан.> | <лог. вираз> || <лог. додан.>
  20.  <лог. додан.>::= <лог. од.> | !<лог. од.> | [<лог. вираз>]
  21.  <лог. од.> ::= <відношення> | true | false |

Граматика мови створена під впливом мов Pascal та C , зокрема аналогічно першій програма починається з ключового слова program, для початку оголошення використовується слово var. Від мови С було перейнято дужки, що позначають початок і кінець програми, ключове слово main, конструкції умови, циклу та присвоєння.


  1.  Приклади роботи програми

Рисунок 1 –  Вікно редагування тексту, приклад роботи програми з помилками.

Рисунок 2 – Вікно результатів, приклад роботи  програми з помилками.

На рисунку 1 зображено вікно редагування вхідного тексту програми, в якому допущено декілька синтаксичних помилок. На рисунку 2 зображено вікно перегляду результатів. В полі помилок Error Log виведене повідомлення про першу знайдену в тексті помилку. Знайшовши її, аналізатор не припиняє перегляду тексту, проте повідомлення більше не виводимуться. Крім того, синтаксична помилка не впливає на побудову таблиць лексем, ідентифікаторів та констант

Рисунок 3 – Вікно редагування тексту, приклад роботи  програми без помилок

Рисунок 4 – Вікно результатів, приклад роботи  програми без помилок

На рисунку 3 зображено вікно редагування вхідного тексту програми, в якому відсутні помилки. В полі помилок Error Log вікна перегляду результатів (рисунок 4) виведене повідомлення про успішне завершення аналізу та відсутність помилок в коді.


Список використаних джерел

1. Ахо, А. Компиляторы: принципы, технологии и инструменты. : Пер. с англ / А. Ахо, Р. Сети, Дж. Ульман. – М. : Издательский дом «Вильямс», 2003. – 768с. : ил. – Парал. тит. англ. : автор невідомий.

2. Конспект лекцій з курсу лінгвістичного забезпечення САПР


 

А также другие работы, которые могут Вас заинтересовать

49292. Составление математической модели турбокомпрессора по заданным расходным характеристикам 149.54 KB
  В качестве недостатка таких методов можно привести пример когда для вновь создаваемого или форсируемого двигателя основной технической проблемой становится к примеру выбор параметров турбокомпрессора или топливного насоса высокого давления ТНВД. Применительно к турбокомпрессорам это могут быть расходные характеристики которые широко распространяются их производителями с целью увеличения рынка сбыта. 1 составить математическую модель турбокомпрессора.
49293. Учет заработной платы сотрудников предприятия 354.85 KB
  Задача «Учет заработной платы сотрудников предприятия» решается с целью получения сведений о средней и суммарной заработной плате каждого сотрудника с начала года до указанного месяца, упорядоченные по алфавиту.
49295. Разработка грузового плана нефтеналивного судна т/х «Сейфула Кади» 161.78 KB
  В данной работе разрабатывается грузовой план нефтеналивного судна т х Сейфула Кади выполняется расчет ходовых запасов; размещение груза расчет кренящего момента дифферентовка и соответствующее принятие балласта расчет остойчивости и прочности составления чертежа грузового плана. Основные характеристики и размерения судна: Тип Стальное однопалубное двухвинтовое наливное судно без седловатости с двойным дном двойным бортом с баком с машинным отделением и рубками расположенными в корме с 6 грузовыми танками.9 1438 63257...
49296. Автоматизация поддержания параметров микроклимата в животноводческом помещении 1.02 MB
  Состояние микроклимата закрытых животноводческих помещений определяет комплекс физических факторов температура влажность движение воздуха солнечная радиация атмосферное давление освещение и ионизация газовый состав воздуха кислород углекислый газ аммиак сероводород и др. Описание работы технологической линии ОВС включает калорифер радиальный центробежный вентилятор магистральный воздуховод и воздуховоды равномерной раздачи воздуха выходные отверстия которых оборудованы жалюзийными решетками. Отопительновентиляционная...