要求:對如下工作進行展開描述
(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...