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

 


 

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

33176. Сущность и необходимость кредита, его функции и законы. Ссудный процент и влияющие на него факторы 60 KB
  Еще в древности за два тысячелетия до нашей эры были известны многочисленные виды натуральных ссуд с уплатой процента в натуральной форме скотом зерном и т. В условия выдачи денежных ссуд процент соответственно уплачивается в денежной форме Уплата процента есть передача части прибыли получаемой заемщиком кредитору. Можно утверждать что ставка процента это цена кредита. Ситуация на финансовых рынках при которой объем предлагаемых заемных средств соответствует платежеспособному спросу и определяет равновесную ставку ссудного...
33177. Понятие ценной бумаги. Виды долевых ценных бумаг и их характеристика 12.79 KB
  Долевые ценные бумаги акции представляют долю их владельцев в реальной собственности. В зависимости от характера обращения акции делятся на именные и на предъявителя. Акции на предъявителя могут свободно обращаться на рынке ценных бумаг именные акции или не подлежат обращению или их переход к другому владельцу связан с регистрацией этой сделки. Акции акционерного общества можно разделить на размещенные и объявленные.
33178. Виды долговых ценных бумаг и их характеристика 13.9 KB
  К долговым ценным бумагам относятся облигации казначейские обязательства государства депозитные сберегательные сертификаты и векселя. Облигации выступают главным инструментом мобилизации средств правительствами различными государственными органами и муниципалитетами. Облигации действуют строго определенный срок. По сроку действия обычно облигации подразделяются на краткосрочные среднесрочные и долгосрочные.
33179. Понятие эмиссионной ценной бумаги. Виды и методики расчета цены и доходности 16.54 KB
  В подавляющем большинстве случаев цена размещения существенно превышает номинальную стоимость что обусловлено ростом стоимости активов в расчете на одну акцию вследствие развития фирмы. Используется именно текущая цена а не та цена которая была заплачена за облигацию инвестором. Пусть текущая цена облигации равна 100 ставка купона 10 то тогда облигация будет иметь: Текущая доходность без учета стоимости погашения ценной бумаги в размере 10 . Купон 10 х 100 = х 100 = 10 Цена 100 Одно из основных...
33180. Финансовые отношения организаций. Особенности финансов организаций различных организационно-правовых форм и отраслей экономики 18.84 KB
  59 Финансовые отношения возникают только при наличии денежных отношений: формирование имущества предприятия получение доходов привлечение заемных источников финансирования хозяйственной деятельности распределение доходов образующихся в результате этой деятельности их использование на цели развития предприятия. Финансовые отношения возникают между: учредителями в момент создания предприятия при формировании уставного капитала; предприятиями и организациями в процессе формирования и распределения валового дохода при оплате поставок...
33181. Характеристика активов, их группировка по степени ликвидности, обязательств – по степени срочности погашения. Оценка ликвидности баланса 17.13 KB
  скорости превращения в денежные средства все активы организации условно можно подразделить на пять групп. Наиболее ликвидные активы А денежные средства и краткосрочные финансовые вложения. Быстрореализуемые активы А2 активы для обращения которых в наличные средства требуется определенное время. Медленно реализуемые активы А3 производственные запасы незавершенное производство и готовая продукция.
33182. Взаимосвязь выручки, расходов и прибыли от реализации продукции. Показатели анализа безубыточности 41.86 KB
  61 Для прогнозирования максимально возможной прибыли в плановом году целесообразно сопоставить выручку от реализации продукции с общей суммой затрат подразделяемых на переменные постоянные и смешанные. Разность между фактическим количеством реализованной продукции и безубыточным объемом продаж продукции это зона безопасности прибыли и чем она больше тем стабильнее финансовое состояние предприятия. График позволяет установить при каком объеме реализации продукции предприятие получит...
33183. Понятие и расчет показателей рентабельности 273.64 KB
  62 РЕНТАБЕЛЬНОСТЬ это показатель характеризующий степень прибыльности или убыточности производства фирмы в целом или отдельных видов продукции. Расчет показателей рентабельности: Общая рентабельность определяется как отношение прибыли до налогообложения к выручке от реализации продукции. Рентабельность собственного капитала определяется как отношение чистой прибыли к величине собственного капитала организации.Формула расчета:где ЧПУОП чистая прибыль убыток отчетного периода;СК0 собственный капитал на начало года;СК1 ...
33184. Расчет порога рентабельности, запаса финансовой прочности, производственный леверидж 22.1 KB
  Рн объем реализации в натуральном выражении. ПРд порог рентабельности в денежном выражении. ПРн порог рентабельности в натуральном выражении. Формула расчета порога рентабельности в денежном выражении: ПРд = ВЗпост В Зпер Формула расчета порога рентабельности в натуральном выражении в штуках продукции или товара: ПРн = Зпост Ц ЗСпер Насколько далеко предприятие от точки безубыточности показывает запас финансовой прочности.