編譯原理詞法分析

2021-09-29 01:23:09 字數 2592 閱讀 7495

要求:對如下工作進行展開描述

(1) 給出語言的詞法規則描述

• 識別符號、關鍵字、整常數、字元常數、浮點常數

• 單界符:+,-,×,:,…

• 雙界符:/*,:=,…

• 注釋

(2) 針對這種單詞的狀態轉換圖和程式框圖

(3) 核心資料結構的設計

如符號表、關鍵字等

(4) 錯誤處理

錯誤的位置及型別等

#include#include#include#include#include#includeusing namespace std;

int aa;// fseek的時候用來接著的

string word = "";

string reserved_word[28];//保留

char buffer;//每次讀進來的乙個字元

int num = 0;//每個單詞中當前字元的位置

int line = 1; //行數

int row = 1; //列數,就是每行的第幾個

bool flag; //檔案是否結束了

int flag2;//單詞的型別

//設定保留字

void set_reserve()

//看這個字是不是字母

bool judge_word(char x)

else return false;

}//看這個字是不是數字

bool judge_number(char x)

else return false;

}//看這個字元是不是界符

bool judge_jiefu(char x)

' || x == '"' || x == '\'')

else return false;

}//加減乘

bool judge_yunsuanfu1(char x)

else return false;

}//等於 賦值,大於小於 大於等於,小於等於,大於小於

bool judge_yunsuannfu2(char x)

else return false;

}//這個最大的函式的總體作用是從檔案裡讀乙個單詞

int scan(file* fp)

//cout<= 'a' && temp[j] <= 'z')

}for (int i = 1; i <= 25; i++)

} aa = fseek(fp, -1, seek_cur);

return 1;

} //開始是加減乘 一定是型別4

else if (judge_yunsuanfu1(buffer))

//開始是數字就一定是數字 2

else if (judge_number(buffer))

/*if (buffer = fgetc(fp))

else}*/

} if (feof(fp))

else

} aa = fseek(fp, -1, seek_cur);

if (flagp == 0)

else

}//檢驗界符

else if (judge_jiefu(buffer))

//檢驗 <=、 >=、 <>、 == =、 <、>

else if (judge_yunsuannfu2(buffer))

}//檢驗 >= ==

else

} if (feof(fp))

aa = fseek(fp, -1, seek_cur);

return 4;

} //首字元是/ 有可能是除號 也有可能是注釋

else if (buffer == '/')

// 這一行剩下的全被注釋了

if (buffer == '/')

if (feof(fp))

else

//line++; row = 1;

return 0;

} if (buffer == '*')

if (buffer != '*')continue;

else

if (buffer == '/')

else continue;

}if (feof(fp))

}} }

else

}int main()

while (flag == 1)

else if (flag2 == 3)

else if (flag2 == 4)

else if (flag2 == 2)

else if (flag2 == 7)

else if (flag2 == 6)

else if (flag2 == 5)

//非法字元

else if (flag2 == -1)

}int a = fclose(fp);

cout << "press e to close" << endl;

char end;

while (cin >> end && end != 'e')

return 0;

}

編譯原理詞法分析

編譯原理實驗一 詞法分析練習 include include include define tokenmax 100 define progmax 1000 define k esc 27 void analytics 詞法分析 void scanner 輸入掃瞄 bool isletter cha...

詞法分析(編譯原理)

詞法分析 英語 lexical analysis 是電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer,簡稱lexer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱...

編譯原理詞法分析

1 注意識別符號和無符號整數的重複問題,本人採用map解決。2 cin ch自動忽略空白字元。include include include include using namespace std struct pairs int isboundaries char ch return 3 case...