Автор работы: a********@inbox.ru, 26 Ноября 2011 в 21:08, лабораторная работа
Целью данной курсовой работы является изучение составных частей, основных принципов построения и функционирования компилятора, практическое освоение методов построения составных частей компилятора для заданного входного языка.
Введение 3
Организация таблицы идентификаторов 4
Исходные данные 4
Назначение таблиц идентификаторов 4
Метод простого рехэширования 6
Построение таблиц идентификаторов по методу бинарного дерева 8
Проектирование лексического анализатора 12
Исходные данные 12
Принципы работы лексического анализатора 13
Схема распознавателя 15
Результат работы лексического анализаора 16
Приложение 18
Код программы организации таблицы идентификаторов: 18
Код программы лексического анализатора 22
Блок-схема лексического анализатора 26
Node *root = first(arr[0]);
for (int i = 1; i<dim; i++)
search_insert(root, arr[i]);
CString simb=m_Edd;
bool flag=false;
findsimb(root, 0, simb, flag);
if (result==-1) m_Tree="no found!"; else
{m_Tree="comparisons "+(ToString(result));
totaltree+=result;
}
flag=false;
m_Statall="all comparisons "+(ToString(totaltree));
//Hash-Rehash/////////////////
int id, id2;
simb=m_Edd;
id=hash(simb);
id2=id;
flag=false;
cntr=0;
compare=0;
double a,b;
while ((cntr<dim)&&(!flag)) {
total+=1;
compare+=1;
if ((table[id]!="p")&&(table[id]=
{m_StatHash="FIND!!
m_StatCompare="comparisons " +ToString(compare);
m_StatAll2="all comparisons " +ToString(total);
a=compare; b=total;
hsh=(a/b);
a=result; b=totaltree;
tre=(a/b);
if (hsh<1) {
m_StatHash=DoubleToString(hsh)
m_StatMid=DoubleToString(tre);
else {m_StatHash=ToString(hsh);
m_StatMid=ToString(tre);
}
cntr+=1;
}
else {cntr+=1; id=rehs(id2, cntr);}
}
result=0;
if (!flag) {m_StatHash="no found!!!!"; m_Statall="";};
UpdateData(false);
};
void CLabaDlg::OnCancelBut()
{
UpdateData(true);
total=0;
compare=0;
itog=0;
totaltree=0;
m_StatAll2="all comparisons 0";
m_StatHash="0";
m_StatCompare="comparisons";
m_Tree="comparisons";
m_Statall="all comparisons 0";
m_StatMid="0";
UpdateData(false);
}
int hash(CString string)
{
int hs;
int h;
int rbc;
h=strlen(string);
rbc = h/2;
h=h-1;
hs = string[0]+string[rbc]+string[
return hs;}
int rehs(int id,int j)
{return (id+j)%366;
}
void CLabaDlg::OnBUTExit()
{ OnOK(); }
void CLabaDlg::OnButfindall()
{ UpdateData(TRUE);
totaltree=0;
result=0;
bool flag=false;
CString simb, ss;
Node *root = first(arr[0]);
for (int i = 1; i<dim; i++)
search_insert(root, arr[i]);
for (i=0; i<a;i++){
simb=arr[i];
flag=false;
findsimb(root, 0, simb, flag);
if (result==-1) m_Tree="no found!"; else
{m_Tree="comparisons "+(ToString(result));
totaltree+=result;
}
result=0;
}
flag=false;
m_Tree="";
m_Statall="all comparisons "+(ToString(totaltree));
m_StatMid="middle "+ ToString(totaltree/a);
/////////////////////////////
int id, id2;
i=0; total=0;cntr=0; flag=false;
id=dim;
for (i=0; i<dim; i++){
if (table[i]!="p"){
simb=table[i];
flag=false;
id=hash(simb);
id2=id;
while ((cntr<dim)&&(!flag)){
if (table[id]==simb) {
flag=true;
total+=1;
}
else {
cntr+=1;
id=rehs(id2, cntr);
total+=1;}
}
cntr=0;
}
}
m_StatHash="middle " + ToString(total/a);
m_StatCompare="total items "+ToString(a);
m_StatAll2="comparisons "+ToString(total);
UpdateData(false);
int k=0;
CStdioFile myfile,myfile2;
CString ee,FilName ,q,a;
char *b = new char[];
bool flag=false;
int skobka=0;
int number=0;
bool mistake = false;
CString inputstring;
/****/
void CLaba22Dlg::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
}
CString ToString(int dig){
const size_t newsize = 100;
char nstring[newsize];
itoa(dig,nstring, 10);
CString cstring(nstring);
return cstring;
}
CString Conclude(char X)
{
if(X=='C') return("operator cikla");//for
if(X=='G') return("operator cikla"); //do
if(X=='L') return("znak sravnenia");
if(X=='K') return("razdelitel");
if(X=='F') return("prisvaevanie");
if(X=='O') return("celoe chislo");
if(X=='Q') return("drobnoe chislo");
if(X=='W') return("chislo s plavajushjaja tochka");
if(X=='U') return("exp vid");
if(X=='M') return("prisvaivanie");
if(X=='Y') return("skobki");
if(X=='y') return("skobki");
if(X=='i') return("!!mistake!!");
if((X=='a')||(X=='B')||(X='D')
else return("!!mistake!!");
}
CString Analiz(char *wInput)
{
int i = 0;
CString Way= "h";
char State = 'h';
do {
switch (State) {
case 'h':
switch (wInput[i]) {
case 'f' : State = 'A'; break; //for
case 'd' : State = 'D'; break; // do
case ';' : State = 'K'; break;
case '>' : State = 'L'; break;
case '<' : State = 'L'; break;
case '=' : State = 'L'; break;
case ':' : State = 'E'; break;
case '(' : State = 'Y'; break;
case ')' : State = 'y'; break;
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 'a' : State = 'a'; break;
case 'b' : State = 'a'; break;
case 'c' : State = 'a'; break;
case 'e' : State = 'a'; break;
case 'g' : State = 'a'; break;
case 'h' : State = 'a'; break;
case 'i' : State = 'a'; break;
case 'j' : State = 'a'; break;
case 'k' : State = 'a'; break;
case 'l' : State = 'a'; break;
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;
default : State = 'i'; break;
}; Way=Way + State; break;
case 'a':
switch (wInput[i]) {
case 'a' : State = 'a'; break;
case 'b' : State = 'a'; break;
case 'c' : State = 'a'; break;
case 'd' : State = 'a'; break;
case 'e' : State = 'a'; break;
case 'f' : State = 'a'; break;
case 'g' : State = 'a'; break;
case 'h' : State = 'a'; break;
case 'i' : State = 'a'; break;
case 'j' : State = 'a'; break;
case 'k' : State = 'a'; break;
case 'l' : State = 'a'; break;
Информация о работе Таблица идентификаторов. Проектирование лексического анализатора