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

Автор работы: 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 Мб (Скачать документ)

   default : State = 'i'; break;

   }; Way=Way + State; break;

  

 case 'V':

   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 = 'U'; break;

   default : State = 'i'; break;

   }; Way=Way + State; break;

 

   case 'Z':

   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 = 'U'; break;

 default : State = 'i'; break;

 }; Way=Way + State; break;

 

 case 'Y':

 switch (wInput[i]) {

 case '(' : State ='Y'; skobka+=1; break;

 case '\0' : State = 's';skobka+=1; break;

 default : State = 's'; break;

 }; Way=Way + State; break;

 

 case 'y':

 switch (wInput[i]) {

 case ')' : State = 'Y'; skobka-=1; break;

 case '\0' : State = 's'; skobka-=1; break;

 default : State = 's'; break;

 }; Way=Way + State; break;

 
 

     case 'e': break;

        }

    }while ((wInput[i++]!='\0'));

 

    return Way;

}

 

void CLaba22Dlg::OnButton1()

 

{  UpdateData(TRUE);

 FILE *input;

    char *temp = new char[20];

 int c=-2; int p=0;

    CString Way, ee;

    int i=1, k=0;

 

 char lex;

 inputstring="\0";

    CFileDialog m_FileOpen(TRUE);

    if(m_FileOpen.DoModal()==IDOK)

    { m_ed1.SetWindowTextA(m_FileOpen.GetPathName());

  m_ed1.GetWindowTextA(FilName);

  input = fopen(FilName,"r");

  while((!feof(input))&&(!mistake))

  {

 

 fscanf(input,"%s",temp);

 if ((strcmp(temp,"/*")==0))

 {flag=true; }

  k=strlen(temp);

  if ((!flag)&&(!mistake))

  { 

  number+=1;

  Way = Analiz(temp);

 

  if  ( (Way[Way.GetLength()-1]!='e') && (!flag))

    {

  lex=Way[Way.GetLength()-2]; 

  m_Grid.SetTextMatrix(number,0, ToString(number));

  m_Grid.SetTextMatrix(number,1, temp);

  m_Grid.SetTextMatrix(number,2, Conclude(lex)); 

   }

  }

  if ((temp[k-1]=='/')&&(temp[k-2]=='*'))

  flag=false;

  }

  if (skobka!=0) { m_Grid.SetTextMatrix(number+1,2, "gde-to ne hvataet skobki"); }

  }

 

 }

 m_inptstr=inputstring;

 fclose(input);

 UpdateData(false);

}

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