Автор работы: a********@inbox.ru, 26 Ноября 2011 в 21:08, лабораторная работа
Целью данной курсовой работы является изучение составных частей, основных принципов построения и функционирования компилятора, практическое освоение методов построения составных частей компилятора для заданного входного языка.
Введение 3
Организация таблицы идентификаторов 4
Исходные данные 4
Назначение таблиц идентификаторов 4
Метод простого рехэширования 6
Построение таблиц идентификаторов по методу бинарного дерева 8
Проектирование лексического анализатора 12
Исходные данные 12
Принципы работы лексического анализатора 13
Схема распознавателя 15
Результат работы лексического анализаора 16
Приложение 18
Код программы организации таблицы идентификаторов: 18
Код программы лексического анализатора 22
Блок-схема лексического анализатора 26
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;
Информация о работе Таблица идентификаторов. Проектирование лексического анализатора