**
詞法分析的首要任務是從左至右逐個掃瞄源程式的字元流,輸出乙個個單詞符號:
這個單詞可能很長,,長到乙個緩衝區無法將它們全部都一次裝進去比如說裝到i…love…yo剛好緩衝區裝滿了,還剩乙個u你沒有辦法再裝進去了,但是你將緩衝區對半以後可能把這個單詞的i…lo一部分裝入了前半段,ve…you另一部分裝入了後半段,這樣你還是一次性的裝入了緩衝區,提高了詞法分析程式的效率。
** do 99 k = 1,10 和 do 99 k = 1.10
前乙個是乙個迴圈的語句,而後乙個是乙個賦值語句,掃瞄到.和,才發現不同時,就需要回溯,降低了詞法分析程式的效率,所有用超前掃瞄,這樣就提高了效率。
** 識別符號—— (id,指向識別符號在符號表入口的位址)ps:這裡尖括號顯示不出來所以用來圓括號
常數——
無符號數——《無符號數,值》
分界符——《分界符,->
運算子——《運算子,->
關鍵字——《關鍵字,->
例 c程式
while (i>=j) i–;
輸出單詞符號:
< while, - >
< (, - >
< id, 指向i的符號表項的指標 >
< >=, - >
< id, 指向j的符號表項的指標 >
< ), - >
< id, 指向i的符號表項的指標 >
正規集和正規表示式等價,乙個程式語言的單詞表(詞法分析語言的物件),單詞表裡面的所有單詞構成了一種字串的集合,這種特殊的集合——正規集,為了很好的描述正規集,我們運用一套正規系統給它命名,這個記號系統——正規式。每乙個正規式對應乙個正規集,每乙個正規集都可以用乙個直觀的與它裡面的字的結構對應的很好的表示式——正規式去對應。
dfa和nfa等價,dfa是確定的,很容易進行程式實現,dfa識別乙個語言的時候很困難,nfa去識別乙個語言是很容易的,很容易去進行設計。(nfa轉化為dfa是用子集構造法)為了提高程式的效率我們又把dfa化簡形成了最簡dfa(第一次劃分為終態和非終態,用空來進行區分,因為乙個終態識別了空之後還在終態,而乙個非終態識別了空之後就可能轉向其他狀態了)。
現在橋的兩頭已經搭建好了,需要乙個一座橋把它們串聯一起來,這時候就需要用到正規表示式和nfa等價。此時詞法分析程式器的大致模型已經出來了。
有了這些我們的詞法分析程式器應該很完美了,這時候我們在加入正規文法和nfa等價,有了正規文法和nfa等價之後就可以由正規文法和正規表示式等價,正規文法和正規集等價,正規文法和dfa等價,構成了一條通路,使我們的詞法分析程式器更加錦上添花。
此片文章是聽了國防科技大學和我們學校的老師講詞法分析的結合,所寫的感悟。
編譯原理詞法分析
編譯原理實驗一 詞法分析練習 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...