51207

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

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

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

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

Русский

2014-02-07

48.83 KB

9 чел.

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

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

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

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

ОТЧЕТ

к лабораторной работе №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 – Несоответствующий правилу поток лексем

 


 

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

85492. Информационные технологии в управлении персоналом на ОАО «Завод «НЕФТЕПРОММАШ» 2.61 MB
  В первой главе освещены теоретические основы управления персоналом организации. Представлена характеристика организации, определенны миссия и задачи организации. Показана организационная структура. Определены сущность и характеристики управления персоналом, рассмотрены требования...
85493. ВЫРАБОТКА РЕКОМЕНДАЦИЙ ПО ОРГАНИЗАЦИИ И ПРОВЕДЕНИЮ КОРРЕКТУРЫ НАВИГАЦИОННЫХ КАРТ И ПОСОБИЙ ПРИ ПОДГОТОВКЕ К РЕЙСУ И В ПЕРИОД ПЛАВАНИЯ 699 KB
  Цель дипломной работы – разработка рекомендаций и проведение корректуры навигационных карт и пособий при подготовке к рейсу и в период плавания. В процессе выполнения дипломной работы получены рекомендации по организации и проведению корректуры бумажных и электронных карт и пособий.
85494. Расчет и проектирование сосуда для хранения агрессивных жидкостей 320.3 KB
  Для владельцев автомобилей экономически целесообразно, особенно в настоящее время, при быстром росте цен на топливо, купить емкость для хранения бензина или дизтоплива. Имея такие емкости автовладелец может не зависеть от сезонных колебаний цен на топливо.
85495. Методы поддержки малого бизнеса в муниципальном образовании на основе разработки программы поддержки и развития малого инновационного бизнеса 656.5 KB
  Формирование и развитие рыночных отношений предполагают свободное и равноправное сосуществование и развитие различных форм собственности и секторов внутри каждой формы собственности. Особое место в экономике России на этапе рыночных преобразований принадлежит малому предпринимательству.
85496. SAP система, как инструмент повышения эффективности малого бизнеса (на примере ООО «Аист») 1.55 MB
  Цели и задачи дипломной работы. Целью прохождения дипломной практики является изучение и анализ бизнес-процессов компании ООО «Аист», а так же внедрение информационной системы и ее адаптация. Исходя из целей практики, можно выделить следующие задачи: Рассмотрение структуры и специфики компании ООО «Аист»...
85497. Система электроснабжения КЦ №2 4.13 MB
  Реле косвенного действия воздействуют на отключение и включение выключателей с помощью специальных электромагнитов питаемых от сети постоянного или переменного тока называемого оперативным.
85498. Направления снижения себестоимости продукции предприятия 740 KB
  Целью дипломной работы является поиск возможных путей снижения себестоимости на основании теоретических исследований проблемы и анализа ее состояния на ООО «Газосиликат». Практическая ценность данной дипломной работы заключается в том, что при применении приведенных в ней мероприятий...
85500. Разработка предложений по выполнению творческих проектов ученикам 7-го класса 3.3 MB
  Цель: разработка рекомендаций учителю технологии по организации выполнения творческих проектов школьников. Задачи: Изучить особенности реализации метода творческих проектов в общеобразовательной средней школе Исследовать особенности подготовки творческих проектов к защите их олимпиаде по технологии...