參考文件:
這個計算器原始碼我上傳到csdn上來,共享出來供有興趣的同學參考
之前大學的時候,編譯原理課程有乙個做計算器的任務,當時沒有做,只顧做乙個漂亮計算器介面。
想來當時是買櫝還珠了,有點小遺憾,覺得編譯原理沒有實踐,沒有理解透徹。
趁這週末有空,就把編譯器重新做一做,下面是做出來的效果:
1. 界定實現範圍
考慮主要是簡單實踐,所以只實現 正整數與浮點數的 + - * / ()
2. 實現詞法分析器
分析出這幾種詞語,其他情況,認為是異常
enum enumtokentype
;struct calctoken
;union tokendata
;3. 實現語法分析器
思路: 使用分塊思路把內容按優先順序分塊,先使用'(' 和 ')'分塊,然後使用'*' 和 '/'號分塊,分塊結束;計算時從左往右計算就可以了。
匹配內容:
exp -> term
exp -> term + exp +-從左到右依此執行
exp -> term - exp
term -> factor
term -> factor * term */次優先,內部先左後右
term -> factor / term
factor -> number
factor -> (exp)()最優先
// 思路: 使用分塊思路把內容按優先順序分塊,先使用()分塊,然後使用*/號分塊,分塊結束;計算時從左往右計算就可以了。
enum enumproctype
;struct procsubnode;
struct procnode
;enum enumprocsubnodetype
;struct procsubnode
;class csyntaxnodeanalysis
;這個計算器原始碼我上傳到csdn上來,共享出來供有興趣的同學參考。
編譯原理之詞法分析 語法分析 語義分析
詞法分析 lexical analysis或scanning 和詞法分析程式 lexical analyzer或scanner 詞法分析階段是編譯過程的第乙個階段。這個階段的任務是從左到右乙個字元乙個字元地讀入源程式,即對構成源程式的字元流進行掃瞄然後根據構詞規則識別單詞 也稱單詞符號或符號 詞法分...
編譯原理 詞法分析器
1 從源程式檔案中讀入字元。2 統計行數和列數用於錯誤單詞的定位。3 刪除空格類字元,包括回車 製表符空格。4 按拼寫單詞,並用 內碼,屬性 二元式表示。屬性值 token 的機內表示 5 如果發現錯誤則報告出錯 6 根據需要是否填寫識別符號表供以後各階段使用 int tag 0 設立標誌 一開始本...
編譯原理之語法,語義,詞法分析
詞法分析 lexicalanalysis 或scanning 和詞法分析程式 lexicalanalyzer 或scanner 詞法分析階段是編譯過程的第乙個階段。這個階段的任務是從左到右乙個字元乙個字元地讀入源程式,即對構成源程式的字元流進行掃瞄然後根據構詞規則識別單詞 也稱單詞符號或符號 詞法分...