Таблица идентификаторов. Проектирование лексического анализатора

Автор работы: a********@inbox.ru, 26 Ноября 2011 в 21:08, лабораторная работа

Описание

Целью данной курсовой работы является изучение составных частей, основных принципов построения и функционирования компилятора, практическое освоение методов построения составных частей компилятора для заданного входного языка.

Содержание

Введение 3
Организация таблицы идентификаторов 4
Исходные данные 4
Назначение таблиц идентификаторов 4
Метод простого рехэширования 6
Построение таблиц идентификаторов по методу бинарного дерева 8
Проектирование лексического анализатора 12
Исходные данные 12
Принципы работы лексического анализатора 13
Схема распознавателя 15
Результат работы лексического анализаора 16
Приложение 18
Код программы организации таблицы идентификаторов: 18
Код программы лексического анализатора 22
Блок-схема лексического анализатора 26

Работа состоит из  1 файл

курсовик2.doc

— 1.08 Мб (Скачать документ)

   case 'm' : State = 'a'; break;

   case 'n' : State = 'a'; break;

   case 'o' : State = 'a'; break;

   case 'p' : State = 'a'; break;

   case 'q' : State = 'a'; break;

   case 'r' : State = 'a'; break;

   case 's' : State = 'a'; break;

   case 't' : State = 'a'; break;

   case 'u' : State = 'a'; break;

   case 'v' : State = 'a'; break;

   case 'w' : State = 'a'; break;

   case 'x' : State = 'a'; break;

   case 'y' : State = 'a'; break;

   case 'z' : State = 'a'; break;

   case '0' : State = 'a'; break;

   case '1' : State = 'a'; break;

   case '2' : State = 'a'; break;

   case '3' : State = 'a'; break;

   case '4' : State = 'a'; break;

   case '5' : State = 'a'; break;

   case '6' : State = 'a'; break;

   case '7' : State = 'a'; break;

   case '8' : State = 'a'; break;

   case '9' : State = 'a'; break;

   case '\0' : State = 's'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

 

 case 'A': //f-o-r

   switch (wInput[i]) {

   case 'o' : State = 'B'; break;

   case '\0' : State = 's'; break;

   default : State = 'a'; break;

   }; Way=Way + State; break;

   case 'B': //fo-r

   switch (wInput[i]) {

   case 'r' : State = 'C'; break;

   case '\0' : State = 's'; break;

   default : State = 'a'; break;

   }; Way=Way + State; break;

   case 'C': //for?

   switch (wInput[i]) {

   case '\0' : State = 's'; break;

   default : State = 'a';  break;

   }; Way=Way + State; break;

   case 'D'://o(do)

   switch (wInput[i]) {

   case 'o' : State = 'G'; break;

   case '\0' : State = 's'; break;

   default : State = 'a'; break;

   }; Way=Way + State; break;

   case 'G':

   switch (wInput[i]) {

   case '\0' : State = 's'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

 
 

   case 'E': //:=

   switch (wInput[i]) {

   case '=' : State = 'F'; break;

   case '\0' : State = 's'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

   case 'F':

   switch (wInput[i]) {

   case '\0' : State = 's'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

 
 

          ///H- freeeeeeeeeeeeeeeeeee

 

  

   case 'I':   

   switch (wInput[i]) {

   case '\0' : State = 's'; flag=false; break;

   default : State = 'I'; break;

   }; Way=Way + State; break;

 

   case 'J':

   switch (wInput[i]) {

   case '\0' : State = 's'; break;

   default : State = 'J'; break;

   }; Way=Way + State; break;

   case 'K':

   switch (wInput[i]) {

   case '\0' : State = 's'; break;

   default : State = 'e'; break;

   }; Way=Way + State; break;

   case 'L':

   switch (wInput[i]) {

   case '\0' : State = 's'; break;

     default : State = 'i'; break;

   }; Way=Way + State; break;

 

   case 'i': mistake=true;

   switch (wInput[i]) {

  

   case '\0' : State = 's'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

   case 'M':

   switch (wInput[i]) {

   case '=' : State = 'L'; break;

   case '\0' : State = 's'; break;

   default : State = 'e'; break;

            }; Way=Way + State; break;

 

   case 'O': //????? ?????

   switch (wInput[i]) {

   case '0' : State = 'O'; break;

   case '1' : State = 'O'; break;

   case '2' : State = 'O'; break;

   case '3' : State = 'O'; break;

   case '4' : State = 'O'; break;

   case '5' : State = 'O'; break;

   case '6' : State = 'O'; break;

   case '7' : State = 'O'; break;

   case '8' : State = 'O'; break;

   case '9' : State = 'O'; break;

 case '\0' : State = 's'; break;

 case '.' : State = 'P';  break;

   default : State = 'i'; break;

            }; Way=Way + State; break;

 case 'P'://drobnaja

     switch (wInput[i]) {

   case '0' : State = 'Q'; break;

   case '1' : State = 'Q'; break;

   case '2' : State = 'Q'; break;

   case '3' : State = 'Q'; break;

   case '4' : State = 'Q'; break;

   case '5' : State = 'Q'; break;

   case '6' : State = 'Q'; break;

   case '7' : State = 'Q'; break;

   case '8' : State = 'Q'; break;

   case '9' : State = 'Q'; break;

   default : State = 'i';  break;

   }; Way=Way + State; break;

 

   case 'Q': //oby4naja drob'

   switch (wInput[i]) { 

   case '0' : State = 'Q'; break;

   case '1' : State = 'Q'; break;

   case '2' : State = 'Q'; break;

   case '3' : State = 'Q'; break;

   case '4' : State = 'Q'; break;

   case '5' : State = 'Q'; break;

   case '6' : State = 'Q'; break;

   case '7' : State = 'Q'; break;

   case '8' : State = 'Q'; break;

   case '9' : State = 'Q'; break;

 case 'E' : State = 'S'; break;

   case '*' : State = 'R'; break;

   '\0' : State = 's'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

           

   case 'R': //floating point

   switch (wInput[i]) {

   case '0' : State = 'R'; break;

   case '1' : State = 'R'; break;

   case '2' : State = 'R'; break;

   case '3' : State = 'R'; break;

   case '4' : State = 'R'; break;

   case '5' : State = 'R'; break;

   case '6' : State = 'R'; break;

   case '7' : State = 'R'; break;

   case '8' : State = 'R'; break;

   case '9' : State = 'R'; break;

 case '-' : State = 'T'; break;

 case '+' : State = 'T'; break;

   default : State = 'i';  break;

   }; Way=Way + State; break;

 

 case 'T'://sign of def floating point

 switch (wInput[i]) {

 case '0' : State = 'W'; break;

   case '1' : State = 'W'; break;

   case '2' : State = 'W'; break;

   case '3' : State = 'W'; break;

   case '4' : State = 'W'; break;

   case '5' : State = 'W'; break;

   case '6' : State = 'W'; break;

   case '7' : State = 'W'; break;

   case '8' : State = 'W'; break;

   case '9' : State = 'W'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

 

 case 'W':

   switch (wInput[i]) {

 case '1' : State = 'W'; break;

   case '2' : State = 'W'; break;

   case '3' : State = 'W'; break;

   case '4' : State = 'W'; break;

   case '5' : State = 'W'; break;

   case '6' : State = 'W'; break;

   case '7' : State = 'W'; break;

   case '8' : State = 'W'; break;

   case '9' : State = 'W'; break;

   case '\0' : State = 's'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

  

   case 'S':

   switch (wInput[i]) {

   case '1' : State = 'U'; break;

   case '2' : State = 'U'; break;

   case '3' : State = 'U'; break;

   case '4' : State = 'U'; break;

   case '5' : State = 'U'; break;

   case '6' : State = 'U'; break;

   case '7' : State = 'U'; break;

   case '8' : State = 'U'; break;

   case '9' : State = 'U'; break;

   case '-' : State = 'Z'; break;

   case '+' : State = 'Z'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

 

 case 'U':

   switch (wInput[i]) {

   case '1' : State = 'U'; break;

   case '2' : State = 'U'; break;

   case '3' : State = 'U'; break;

   case '4' : State = 'U'; break;

   case '5' : State = 'U'; break;

   case '6' : State = 'U'; break;

   case '7' : State = 'U'; break;

   case '8' : State = 'U'; break;

   case '9' : State = 'U'; break;

   case '\0' : State = 's'; break;

Информация о работе Таблица идентификаторов. Проектирование лексического анализатора