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. Конспект лекцій з курсу лінгвістичного забезпечення САПР


 

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

42058. Электро-стартерный запуск авиационных двигателей 710 KB
  Это экономит топливо потребляемое маршевыми реактивными двигателями и вспомогательной силовой установкой и заряд бортовых аккумуляторов ВС. Когда агрегат используется для запуска двигателя напряжение в разъеме не должно быть меньше чем 20 V. Аэродромный подвижной агрегат смонтированный на автоприцепе Специальное оборудование Аэродромного Подвижного Агрегата состоит из генератора приводимого дизельным двигателем который размещен в кожухе системы обеспечения двигателя панель управления панель реле бункер для складывания кабелей....
42059. Технологии водильной буксировки воздушного судна 2.33 MB
  Технологии водильной буксировки воздушного судна Цель работы: ознакомление с основными технологическими особенностями операций буксировки и задней буксировки ВС безопасность операции буксировки меры безопасности труда. Кнструкция ВОДИЛ И БЕЗОПАСНОСТЬ ПРИмененЕНИЯ Учебные требования для выдачи свидетельства на буксировку и заднюю буксировку Существование удостоверения ни совершение задней буксировки и буксировки является важным условием ответственности. Как оператор транспортного средства задней буксировки или связист по самолетному...
42061. Изучение принципа измерения температуры при помощи термоэлектрического преобразователя 143.5 KB
  По основным характеристикам термоэлектрические преобразователи подразделяются: по назначению и эксплуатации погружные и поверхностные; по конструкции крепления ТП на месте эксплуатации с неподвижным и подвижным штуцером с фланцевым креплением; по степени от внешней среды со стороны выводов с обыкновенной или водозащищенной головкой; по степени тепловой инерционности малой до 5с средней до 60 с большой до 180 с. По конструктивному оформлению их делят на группы: показывающие КПП1; КВП1 показывающие и самопишущие с...
42063. Двойственность в линейном программировании (ЛП) 223 KB
  Цель работы изучить возможности табличного процессора MS Excel для решения двойственной задачи линейного программирования. Краткие теоретические сведения Двойственная задача ЛП Предположим что задача линейного программирования ЗЛП имеет вид: Составим другую ЗЛП число переменных которой равно числу ограничений данной задачи т. Если для второй задачи составить двойственную то получим первую задачу. сформулированные задачи составляют пару взаимно двойственных задач ЛП.
42064. Двухиндексные задачи ЛП. Транспортная задача 2.11 MB
  Решение такой задачи рассмотрим на примере оптимальной организации транспортных перевозок штучного товара из пунктов отправления складов в пункты назначения магазины. Требуется определить план перевозок количество единиц груза из пунктов i в пункты Bj так чтобы Вывезти весь груз от отправителей i Удовлетворить потребность каждого потребителя Bj Транспортные расходы были минимальными Математическая модель транспортной задачи имеет вид: требуется определить неотрицательную матрицу X удовлетворяющую условиям и доставляющую...
42065. Изучение работы измерительной цепи для измерения температуры термометром сопротивления в комплекте с нормирующим преобразователем и вторичным прибором 51.5 KB
  В процессе выполнения лабораторной работы закрепить знания по разделу Измерение температуры и Дистанционная передача сигнала измерительной информации теоретического курса Автоматизация производственных процессов Системы управления химикотехнологических процессов. Нормирующие промежуточные преобразователи предназначены для преобразования выходного сигнала первичных преобразователей не имеющих унифицированного сигнала и выходного сигнала переменного тока в унифицированный сигнал постоянного тока. Введение нормирующих...