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

 


 

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

24292. СМК, их характеристика и роль в деятельности PR-структур 38 KB
  Современная система СМК делится на три вида информационных каналов: СМИ телекоммуникацию и информатику. К СМИ относятся: организационнотехнические комплексы позволяющие осуществлять скорую передачу массовое тиражирование больших объемов словесной образной и музыкальной информации. В структуру системы СМИ входят: 1 газеты журналы дайджесты еженедельники и др. Очень часто термины средства массовой коммуникации СМК и средства массовой информации СМИ употребляются как синонимы.
24294. Типология и характеристика СМИ 36.5 KB
  Особо важно подчеркнуть что с юридической точки зрения медиаотрасль национальной экономики образуют не средства массовой информации как таковые а предприятия имеющие либо прямое либо опосредованное отношение к СМИ. Таким образом воспринимая СМИ как рыночную отрасль выпускающую однородную продукцию по однородным технологиям мы соглашаемся с тем что любая газета журнал телеканал являются субъектами рыночных отношений со всеми вытекающими последствиями. Для эффективной деятельности любому изданию необходимо иметь самые детальные...
24295. Взаимодействие PR структур со СМИ 41 KB
  Взаимодействие PR_структур со СМИ. Считается даже что до восьмидесяти процентов всей работы в них приходится на взаимодействие со СМИ. По данным социологического исследования опубликованного в журнале Сообщение самую существенную часть расходов компании составляют связи со СМИ для формирования имиджа кандидата в целом. От степени умения и желания работать со СМИ нередко зависит успех деятельности различных предпринимательских структур органов власти отдельных руководителей политиков.
24296. Пресс-службы: структура, функции, направления деятельности, формы работы 47 KB
  Прессслужбы: структура функции направления деятельности формы работы. В частности в московский отдел входят: директор департамента PR заместитель директора департамента PR главный менеджер департамента PR начальник прессслужбы . Также примером такого устройства прессслужбы может служить прессслужба Государственной Думы или Прессслужба Президента см. Функции отдела: Координация деятельности Отслеживание бюджета Основные преимущества прессслужбы на аутсорсинге работающей удаленно не в штате компании: 1.
24297. Організація системи мерчандайзингу у роздрібній компанії 26.47 KB
  Вибір того або іншого варіанта залежить від багатьох факторів: формату магазину, розміру його торговельної площі, широти асортиментної матриці, частоти ротації і зміни асортименту, організаційної структури магазину в даний момент і напрямів її трансформації у перспективі...
24298. Система СМИ в Российской Федерации 41 KB
  Аудиовизуальные СМИ – радио телевидение эфирное кабельное документальное неигровое кино видеовещание. Обеспечивают деятельность других СМИ поставляя им готовые тексты и сырые факты. Прессцентры являются посредниками между СМИ и подразделениями данного ведомства и действуют по нескольким направления консультируют установление контактов СМИ с различными подразделениями ведомствами Интернет источники.
24299. Мировые тенденции развития современной журналистики 48 KB
  С другой стороны все более заметным становится рост общественной активности в информационной сфере проявляющийся в создании альтернативных массмедиа – по преимуществу на сетевой платформе а также в деятельности гражданских организаций мониторинга СМИ и медиакритики в отстаивании требований демократизации медийного сектора сохранения и развития мощных общественных средств массовой информации. В большой Европе СМИ все чаще называют медиаиндустрией а журналистские произведения – медиапродуктами рассматривая их как товарную продукцию...
24300. Публицистические жанры журналистики и их место в системе жанров журналистского творчества 51 KB
  Жанры журналистики отличаются от литературных достоверностью адресностью фактов. Жанр в прессе – это способ подачи информации. Теоретики классифицируют жанры по назначению объекту изображения теме стилистике выразительным средствам и проч.