這是老師布置的編譯原理的實驗課任務,課餘時間花了近乙個星期的時間去編寫**(主要是c++太久沒有用了,好多函式都不熟悉,查閱了很多資料),這次的詞法分析只有簡單的語法錯誤判斷功能,約等於沒有.如果想要增加功能可以在相關函式**段增加即可.c語言詞法分析流程如圖所示:而且token的種別碼只做了粗略的區分,想要加上也很簡單
這次的**基本沒有寫注釋,但是我相信大家結合流程圖也能看懂,如果覺得太長可以將**複製到visual studio中將函式**塊閉合起來這樣看起來就邏輯清楚了
#include
#include
#include
#include
#include
using
namespace std;
string readfile
(string filename)
;string filefilter()
;string singlelinecommentsfilter()
;string multilinecommmentsfileter()
;string specialcharacterfilter()
;void
separateandjudge()
;bool
isreservedword
(string vocabulary)
;void
separateandjudge()
;void
showtokendata()
;int
digitstarted
(int cnt)
;bool
isboundsymbol
(char ch)
;bool
isoperator
(char ch)
;int
judgestartingcharactortype
(char ch)
;bool
isdigit
(char ch)
;bool
isalpha
(char ch)
;int
alphastarted
(int cnt)
;int
underlinestarted
(int cnt)
;string transchartostring
(char ch)
;int
operatorstarted
(int cnt)
;string codesource;
mapint> tokens;
//identifier is 1,reservedword 2,digit 3,bordersymbol 4,operator 5
intmain()
string readfile
(string filename)
else
return codesource;}}
;string filefilter()
;string singlelinecommentsfilter()
}}return codesource;
}string multilinecommmentsfileter()
;}while
((codesource[cnt +1]
!='*'
and codesource[cnt +2]
!='/'))
; codesource.
erase
(cnt,4)
;}}return codesource;
}string specialcharacterfilter()
}return codesource;
}void
separateandjudge()
}}}int
judgestartingcharactortype
(char ch)
else
else
else
else
else}}
}}return type;
}bool
isboundsymbol
(char ch)",
"\"",}
;for
(int i =
0; i <
7; i++)}
return flag;
}bool
isoperator
(char ch)
;for
(int i =
0; i <
9; i++)}
return flag;
}bool
isdigit
(char ch)
return flag;
}bool
isalpha
(char ch)
;return flag;
}int
digitstarted
(int cnt)
tokens[digit]=3
;return cnt;
}int
alphastarted
(int cnt)if(
isreservedword
(alpha)
)else
return cnt;
}int
underlinestarted
(int cnt)
tokens[word]=1
;return cnt;
}int
operatorstarted
(int cnt)
else
tokens[operators]=5
;return cnt;
}string transchartostring
(char ch)
bool
isreservedword
(string vocabulary)
;bool flag =
false
;for
(int i =
0; i <
32; i++)}
return flag;};
void
showtokendata()
編譯原理 C語言詞法分析器
本程式預設的種別碼的編碼 主介面 功能1提到的input.txt檔案的內容可以是任意c語言 這裡我的input.txt隨便打了一段c語言 進入1功能,直接從input.txt檔案讀取 這裡沒寫路徑輸入,必須把input.txt和本程式的cpp檔案放在同一目錄下 經過分析後得到結果 沒做清屏處理,寫得...
c語言詞法分析器
include include include void main void int reserver char void main void if output fopen output.txt wt null fprintf output,4s t 8s t 16s t 4s n 位置 符號型別...
C語言詞法分析器
include include include include define len 180 int syn,p,m,n char token 10 ch char keyword 32 struct wordline 定義結構體 struct wordline creat struct wordl...