51207

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

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

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

Для предложенного преподавателем варианта контекстного условия расширить атрибутную грамматику из лабораторной работы № 4 добавлением атрибутов, правил их вычисления, правил вычисления контекстных условий. Включить в программу синтаксического анализатора из лабораторной работы № 4 действия по вычислению атрибутов и проверки контекстных условий.

Русский

2014-02-07

48.83 KB

6 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное  учреждение высшего профессионального образования

«Ижевский государственный технический университет им. М.Т.Калашникова»

Кафедра АСОИУ

ОТЧЕТ

к лабораторной работе №5

по дисциплине «Математическая лингвистика»

на тему «Разработка контекстного анализатора»

Вариант №13.

Выполнил:
студент гр. Б04-782-1 Н.А.Сидоров

Руководитель:
ассистент каф.АСОИУ Д.Р.Касимов

Ижевск 2013

1 Постановка задачи

Для предложенного преподавателем варианта контекстного условия расширить атрибутную грамматику из лабораторной работы № 4 добавлением атрибутов, правил их вычисления, правил вычисления контекстных условий. Включить в программу синтаксического анализатора из лабораторной работы № 4 действия по вычислению атрибутов и проверки контекстных условий.

Предложенный вариант контекстного условия выглядит следующим образом: все идентификаторы должны быть разными.


2 Атрибутная грамматика с действиями по построению дерева

В таблице 2.1 можно увидеть атрибутную грамматику для указанного ранее варианта.

Таблица 2.1

В таблице <цифра> обозначает лексему, состоящую только из букв, а <цифра> - какое-либо цифровое слово.

Функция  добавляет  в определенную таблицу в зависимости от типа отправляемой лексемы. Представлены 2 таблицы для лексем: для цифровых и для буквенных идентификаторов.

.

3 Исходный текст синтаксического анализатора

class SynAnalyzer

{

 private:

  …

  vector <List> digitTable;  // таблица цифровых лексем

  vector <List> letterTable; // таблица буквенных лексем

  int GetHashValue()const; // …

  void AddTokInTable();

  void FirstlyInitTables();

  bool IsInField(int )const;

  void Error(int )const; // вывод ошибок

  void A(TTreeNode *);

  void S(TTreeNode *);

  …

 public:

  void Parse();

  …

};

//-----------------------------------------------------------

void SynAnalyzer::Parse()

{

 try

  {

    GetNextToken(); //получили первый терминал, и идем...!

    AddTokInTable(); // добавляем

    S(Form1->TreeView1->Items->Item[0]); // отправляем туда корень

  }

 catch(int e)

  {

    Error(e);

  }

}

//------------------------------------------------------------

void SynAnalyzer::A(TTreeNode *uzel)

{

 TTreeNode *newUzel=Form1->TreeView1->Items->AddChild(uzel,'A'); // добавляем нетерминал

 if (curTok.type==digit)

  {

    //построить бы

    Form1->TreeView1->Items->AddChild(newUzel,curTok.val); //терминал

    GetNextToken();

    AddTokInTable(); // добавляем текущий полученый токен

  }

 else

  {

    if (curTok.type==letter)

     {

       // построить бы

       Form1->TreeView1->Items->AddChild(newUzel,curTok.val);  //терминал

       GetNextToken();

       AddTokInTable(); // добавляем текущий полученый токен

       S(newUzel);

       A(newUzel);

     }

    else throw 1; // letter expected

  }

}

//------------------------------------------------------------

void SynAnalyzer::S(TTreeNode *uzel)

{

 TTreeNode *newUzel=Form1->TreeView1->Items->AddChild(uzel, 'S'); //добавляем нетерминал

 if (curTok.type==letter)

  {

    //построить бы надо

    Form1->TreeView1->Items->AddChild(newUzel,curTok.val); //терминал

    GetNextToken();

    AddTokInTable(); // добавляем в таблицу

  }

 else

  {

    if (curTok.type==digit)

     {

       //построить бы надо

       Form1->TreeView1->Items->AddChild(newUzel,curTok.val); //терминал

       GetNextToken();

       AddTokInTable(); // добавляем curTok.val в таблицу

       A(newUzel);

       S(newUzel);

     }

    else throw 2; // digit expected

  }

}

//-----------------------------------------

void SynAnalyzer::AddTokInTable()

{

 unsigned int h=GetHashValue();

 //проверяем на размер таблицы, вдруг h > размера таблицы

 // если h> размер, то увеличиваем до нужного h

 List *dummy=new List;

 switch (curTok.type)

  {

    case letter:

     if (h > letterTable.size()-1)

      while (1)

       {

         letterTable.push_back(*dummy);

         if (h == letterTable.size()-1) break;

       }

     break;

    case digit:

     if (h > digitTable.size()-1)

      while (1)

       {

         digitTable.push_back(*dummy);

         if (h == digitTable.size()-1) break;

       }

     break;

  }

 delete dummy;

 switch (curTok.type)

  {

    case letter:

     if (letterTable[h].list.empty())

      {

        letterTable[h].list.push_back(curTok.val);

      }

     else

      {

        if (!IsInField(h))

         letterTable[h].list.push_back(curTok.val);

        else throw 4; // был найден повторный идентификатор

      }

     break;

    case digit:

     if (digitTable[h].list.empty())

      {

        digitTable[h].list.push_back(curTok.val);

      }

     else

      {

        if (!IsInField(h))

         digitTable[h].list.push_back(curTok.val);

        else throw 4; // был найден повторный идентификатор

      }

     break;

  }//case

}

Методы bool IsInField(int ) и int GetHashValue() аналогичны тем, что представлены в лексическом анализаторе (л.р. №2).

4 Результаты тестирования

На рисунках 4.2 можно увидеть окно предупреждения, доносящее информацию до пользователя о том, что были введены одинаковые идентификаторы. На рисунке 4.1 окно, предупреждающее пользователя, выведено не будет, поскольку все идентификаторы удовлетворяют условию, о котором было упомянуто ранее в п.1 данной лабораторной работы.

Рисунок 4.1 – Правильный поток идентификаторов

Рисунок 4.2 – Несоответствующий правилу поток лексем

 


 

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

49516. Расчет установки Сушилка Кипящий слой 199.5 KB
  Сушилка кипящего слоя Сушилка кипящего слоя используется для непрерывной и периодической сушки самых разных сыпучих материалов: от песка и химических реактивов до пластмассовой дроблёнки и древесных опилок. Для увеличения производительности сушилка может компоноваться из нескольких секций Сушилка кипящего слоя выгодно отличается от сушилок других типов экономичностью компактностью и надёжностью. Конструирование сушилок кипящего слоя. Сушильные установки кипящего слоя состоят из сушильной камеры газораспределительного...
49517. Проектирование участка внутризоновой единой сети связи Российской Федерации 561.49 KB
  В данном курсовом проекте будет произведено проектирование участка внутризоновой единой сети связи Российской Федерации. Структура проектируемой сети представляет собой кольцо SDH с центральной станцией – г. Новосибирск. Также на сети имеется участок PDH на многомодовом оптическом кабеле.
49518. Линейная автоматическая система управления 1.18 MB
  Анализ объекта управления Идентификация объекта управления получие параметров передаточной функции kоб Тоб tоб Построение амплитудно-частотной и фазовочастотной характеристики объекта Блоксхема автоматизированного проектирования Выводы Список использованной литературы Задание Цель работы: для заданного объекта регулирования требуется спроектировать АСР с заданным типом регулятора ПИрегулятор.
49519. Защита понижающего трансформатора 172 KB
  Основные защиты реагируют на все виды повреждений трансформатора и действуют на отключение выключателей со всех сторон без выдержки времени. Резервные защиты резервируют основные защиты и реагируют на внешние к. Резервные защиты от междуфазных повреждений имеют несколько вариантов исполнения: а МТЗ максимальная токовая защита без пуска по напряжению; б МТЗ с комбинированным пуском по напряжению; в МТЗ обратной последовательности с приставкой для действия при симметричных к. Резервные защиты...
49520. Эконометрика. ОҚУ-ӘДІСТЕМЕЛІК КЕШЕН 220.5 KB
  “Эконометрика” пәнінің бағдарламасы ҚР Білім және ғылым министрлігі бекіткен жоғары кәсіптік білім берудің Жалпыға міндетті білім беру стандартының дипломдандырылған мамандарды (бакалавр) дайындау деңгейіне және міндетті минимум мазмұны талаптарына
49521. Сушильный барабан для сушки шлака 234.5 KB
  Материал уложен на решетку продуваемую газом со скоростью необходимой для создания кипящего слоя Температура материала максимальная температура нагрева В зависимости от свойств высушиваемого материала. В зависимости от свойств высушиваемого материала. Расход тепла кДж кг 58008000 50006000 Расход электроэнергии кВтч т 57 1015 Напряжение по влаге m0 Кг влаги м3 ч 50150 150200 Время сушки материала 2040 мин 1020 секунд Область применения Сушка кусковых материалов Сушка зернистых и сыпучих некомкующихся материалов сведения взяты...
49522. Исследование рычажного механизма 4.37 MB
  Для этого из центра О делают засечку радиусом R = ВBС на траектории точки С которая представляет собой прямую линию вдоль которой движется ползун. Делим траекторию точки В на 12 равных частей и строим 12 положений механизма. Второе мертвое положение соответствует случаю когда шатун и кривошип перекрывают друг друга тогда из точки А делается засечка радиусом R=СBВ на траектории точки С. Траектория этой точки представлена пунктирной линией.
49524. Расчет параметров систем передачи непрерывных сообщений дискретными сигналами 676 KB
  Для преобразования непрерывного сообщения в цифровую форму используются операции дискретизации и квантования. ЗАДАНИЕ НА ПРОЕКТИРОВАНИЕ Исходными данными для выполнения работы являются: параметр характеризующий порядок фильтра формирующего сообщение: к=4; эффективное значение относительной среднеквадратической ошибки передачи информации: =05=0005; частота определяющая ширину спектра сообщения: f0=1200 Гц; вид модуляции: ЧМ; закон распределения: W4 x = . СТРУКТУРНАЯ СХЕМА ЦИФРОВОЙ СИСТЕМЫ ПЕРЕДАЧИ НЕПРЕРЫВНОГО...