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

 


 

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

53406. Занимательная Информатика 57.5 KB
  Вопросы Мозг компьютера Процессор Устройство для запуска считывания информации с магнитных дисков Дисковод Устройство для распечатки информации на бумаге Принтер Лицо компьютера Монитор Наиболее распространенный манипулятор Мышь Устройство введения графической информации Сканер Устройство введения звуковой информации Микрофон Устройство для сохранения информации Память Устройство которое обеспечивает запись и считывание информации с магнитной ленты...
53407. Введення, редагування й форматування тексту 151.5 KB
  ОБЛАДНАННЯ: персональні компютери роздатковий матеріал таблиці Клавіатура Текстовий редактор MS Word. Заповнюють опитувальний лист: Підпишіть рисунок що зображує вікно ТП MS Word. Виберіть підкресліть із запропонованого списку можливості які надає ТП MS Word: створення і редагування текстів форматування абзаців створення таблиць вставка в текст обєктів інших програм форматування дисків форматування символів створення малюнків форматування сторінки друк документа копіювання дисків.
53408. Компьютерная среда и алгоритмы 47 KB
  Тема: Компьютерная среда и алгоритмы. Цель: закрепление и проверка знаний учащихся по теме Алгоритмы и изучение нового материала по теме Компьютерная среда Логомиры Задачи: Обучающая: усвоить понятие алгоритма компьютерная среда логомиры. Она называется Компьютерная среда и алгоритмы Напомните мне что такое алгоритм Правильно. Среда каждой программы имеет свои инструменты и допускает определённый набор действий которые можно выполнить.
53409. Настроювання параметрів сторінок. Створення колонтитулів. Робота з редактором формул 651.5 KB
  Тому важливо оформити документ так щоб він гарно виглядав не тільки на екрані але й на аркуші паперу вміти правильно задати параметри сторінки. План Розмір сторінки поля. Орієнтація сторінки. Встановлення параметрів сторінки.
53410. Алгоритми та їх властивості 55 KB
  Алгоритми та їх властивості Епіграф до уроку: Коль кругом все будет мирно Так сидеть он будет смирно; Но лишь чуть со стороны Ожидать тебе войны Иль набега силы бранной Иль другой беды незваной Вмиг тогда мой петушок Приподымет гребешок Закричит и встрепенется И в то место обернется. Навчальна: дати поняття про алгоритм його властивості; навчити розпізнавати алгоритми навколо себе; вміти розрізняти правильно та неправильно сформульовані алгоритми; формувати цілісну уяву про картину всесвіту; формувати науковий світогляд;...
53411. оздание документов в текстовом процессоре 45 KB
  Задачи: помочь учащимся получить представление об офисном пакете OpenOffice познакомиться с возможностями программы Word научить основным операциям редактирования и форматирования текста в Word. Вопрос: Назовите этапы подготовки текстовых документов. Вопрос: Какие операции входят в процесс редактирования текстового документа Ответ: Исправление ошибок правописание удаление и добавление фрагментов.
53412. Кодирование 71 KB
  Прогнозируемые результаты: Дети познакомятся с новыми понятиям кодирование и декодирование. Дети научатся решать задачи при помощи кодирования и декодирования. № Этапы Деятельность учителя Деятельность учащихся Примечания 1 Организационный момент Здравствуйте дети Меня зовут Алиса Андреевна.Что такое графыКак обозначаются графы Что такое круг Что такое точкаЧто такое стрелочки Дети называют тему.
53413. Сатирическая журналистика второй половины XVIII века. Полемика в изданиях «Трутень» и «Всякая всячина» в аспекте образования и просвещения 122.5 KB
  Целью данной курсовой работы будет являться выявление самых главных вопросов об образовании и просвещении, которые ставили Екатерина II и Новиков, полемизируя на страницах «Всякой всячины» и «Трутня».
53414. Славянские Боги и Богини 111 KB
  Тема: Славѧнские Боги и Богини. Богиня Доля или как ее в древние времена называли Богиня Среча Небесная Богиня счастливой судьбы счастья и удачи в жизни и в созидательных деяниях. Богиня Доля весьма искусная мастерица и рукодельница. Богиня Доля самая младшая дочь Небесной Богородицы Макоши и она же является младшей сестрой Богини Недоли или как ее называли Нестреча.