Автор работы: a********@inbox.ru, 26 Ноября 2011 в 21:08, лабораторная работа
Целью данной курсовой работы является изучение составных частей, основных принципов построения и функционирования компилятора, практическое освоение методов построения составных частей компилятора для заданного входного языка.
Введение 3
Организация таблицы идентификаторов 4
Исходные данные 4
Назначение таблиц идентификаторов 4
Метод простого рехэширования 6
Построение таблиц идентификаторов по методу бинарного дерева 8
Проектирование лексического анализатора 12
Исходные данные 12
Принципы работы лексического анализатора 13
Схема распознавателя 15
Результат работы лексического анализаора 16
Приложение 18
Код программы организации таблицы идентификаторов: 18
Код программы лексического анализатора 22
Блок-схема лексического анализатора 26
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_
m_ed1.GetWindowTextA(FilName);
input = fopen(FilName,"r");
while((!feof(input))&&(!
{
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,
}
}
m_inptstr=inputstring;
fclose(input);
UpdateData(false);
}
Информация о работе Таблица идентификаторов. Проектирование лексического анализатора