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

 


 

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

27548. Формационный поход к типологии государства 29.5 KB
  Типология государства – традиционно рассматривают как теория учение о типах государств когдалибо существовавших в истории человеческого общества или существующих в настоящее время. Типология государства – это процесс систематизации государств с учетом их сущностных свойств для повышения эффективности в теоретической и практической деятельности по изучению государства и правоприменения. Под типом государства понимаются взятые в единстве общие черты различных государств система их важнейших свойств и сторон порождаемых соответствующей...
27549. Формы непосредственной реализации права 27 KB
  Под реализацией права следует понимать претворение воплощение норм права в правомерное поведение субъектов правоотношения. Реализация права как процесс может быть охарактеризован с объективной и субъективной стороны. С объективной стороны – совершение предусмотренных нормами права правомерных действий определенными средствами в известной последовательности в некоторые сроки и некотором месте.
27550. Функции государства, формы их осуществления 26.5 KB
  Под функциями государства понимаются основные направления его деятельности определяющие его сущность и назначение в обществе. Все существующие функции государства можно подразделить на: 1 вспомогательные и основные; 2 постоянные и временные; 3 внутренние и внешние. Внутренние функции охватывают сферу внутренней самостоятельной жизни государства в которую входят экономические культурные экологические отношения а также отношения складывающиеся в области обеспечения правопорядка в обществе.
27551. Функции права: понятие, виды, характеристика 26.5 KB
  Функции права: понятие виды характеристика. Под функцией права понимают либо социальное назначение права либо направление правового воздействия на общественные отношения либо и то и другое вместе взятое. Можно выделить 5 групп функций: общеправовые свойственные всем отраслям; межотраслевые 2ум и более но не всем отраслям права; отраслевые одной отрасли права; правовых институтов конкретному институту права; норм права конкретному виду права. можно различать основные и неосновные юридические функции права.
27552. Функции теории государства и права 25 KB
  В юридической литературе в числе функций теории государства и права называются: онтологическая; методологическая; идеологическая; вводная; обобщающая. С онтологической точки зрения теория государства и права призвана констатировать что и как происходит в сфере государства и права а затем объяснять почему это происходит. 2 Методологическая функция заключается в следующем: права понятия и выводы являются предпосылкой отправным моментом для последующей научной деятельности например понятия €œнорма права€ €œправоотношение€ и т.
27553. Цивилизационные подходы к типологии государства 27 KB
  Тойнби пишет что €œкультурный элемент представляет собой душу кровь лимфу сущность цивилизации; в сравнении с ним экономический и тем более политический план кажется искусственным несущественным заурядным созданием природы и €œдвижущих сил цивилизации€. Понятие цивилизации им сформулировано как относительно замкнутое и локальное состояние социума отличающееся общностью религиозных психологических культурных географических и иных признаков два из которых остаются неизменными: религия и формы ее организации а также степень...
27554. Что такое пробелы в праве и как они устраняются в практике применения правовых норм 39.5 KB
  Точное определение этих границ сфер позволяет обнаружить: 1 отношения урегулированные правом; 2 отношения нуждающиеся в правовом опосредовании; 3 нормативные предписания подлежащие реализации; 4 пробелы и иные недостатки в праве; 5 пределы деятельности правоприменительных органов по осуществлению права. В зависимости от отрасти права в которой они установлены различают пробелы в конституционном государственном гражданском уголовном семейном и других отраслях права. Пробелы различают по форме права в которой они обнаружены.
27555. Экономика и право 27 KB
  Право – это система общеобязательных формально – определенных норм исходящих от государства им охраняемых и регулирующих общественные отношения Социальные последствия соотношения экономики и права: 1 позитивные право способствует развитию экономики тогда когда оно соответствует естественноисторическому ходу развития общества объективным экономическим законам; 2 негативные – право тормозит развитие экономики тогда когда оно противоречит объективным экономическим законам развития общества. Пределы государственноправового...
27556. Юридическая ответственность государства 30.5 KB
  Государство как субъект ответственности. Всякий раз когда государство становится участником какоголибо правоотношения оно может быть привлечено к ответственности за нарушение прав и охраняемых законом интересов другого участника этих отношений и наоборот. Это общее правило касающееся юридической ответственности. Однако говоря о государстве как субъекте ответственности нужно вести речь об ином об особых случаях внедоговорной ответственности государства за вред причиненный в определенных ситуациях.