yacc和lex的編譯
『壹』 怎樣去寫一個編譯器(用C語言寫C語言編譯器),需要哪些知識做鋪墊,可以給一下相關網站和書籍的推薦嗎
寫編譯器重點就是設計並實現一些數據結構和演算法,語言特點太多的話,代碼寫起來不容易,建議你找一個小語言嘗試下,不要一開始就去嘗試成熟語言。否則你會在寫完語法分析程序以後,遭遇到很大的困難。多數人都是在寫語義分析程序的時候,突然發現自己設計的數據結構很爛,後邊越寫越要命。
如果你想入門編譯器的話,那麼可以看《編譯原理與實踐》,整本書先將編譯器理論,然後後邊教你一步步實現c-miuns(c的子集)的編譯器,包括lex,yacc,都在幾千行代碼左右。這本書講的比較簡單易懂一點
也可以學學斯坦福大學的編譯器設計公開課(aiken設計了一個叫cool的語言,專門用來教人寫編譯器),課程地址上面有人給了:Compilers。這門課以前有個實驗環境(據說已經給了,我以前寫的時候還是用的網上一個不完整的實驗環境),把和編譯器知識無關的內容都給你寫好了,你只需要在固定的地方填上你的內容就可以寫出你的編譯器(不要覺得很簡單哦,人家的代碼寫的很精巧的,讀完就發現寫個好編譯器還是很費腦子的),另外,這個實驗環境有個特點,就是在每一步都提供標准程序做對比,你可以在寫完一部分以後就同標准程序對比,及時發現錯誤。這種方式為寫編譯器又提供了很多幫助
先找個小的,慢慢研究,弄懂了整體的結構再說
『貳』 很奇怪為什麼國內沒有任何組織或個人開發最底層的中文編譯器呢
這是一個技術問題,你如果沒讀過編譯原理(龍書)的話,你是看不懂下面的回答的。因為中國技術不足,沒人能寫出支持中文的lex和yacc。首先詞法分析生成器lex,就對中文不友好,它只支持ascii字母,不支持中文。這意味著你編譯器里的詞彙只能是英文單詞,不能是中文詞彙。其次就是語法分析生成器yacc了,也不支持中文,只支持用英文寫的語法規則,不能用中文書寫。這意味著最最基本的語法規則是全英文的,這算哪門子中文編程語言。非常遺憾,中國目前沒有牛人造出支持中文的lex和yacc來,否則全中文編譯器一定會滿天飛的,多到爛大街。為什麼說多到爛大街?一個全中文的編譯器其實僅僅需要修改編譯器的前端詞法分析器和語法分析器(語法分析器甚至無需大改動),後端直接對接開源代碼即可,開源英文編譯器已經爛大街了,把它們的後端移植過來就行了。但關鍵就是沒有支持中文的自動化工具lex和yacc。
自動化這條路走不通,純手寫總可以吧。我猜測易語言就是前端純手寫的全中文編譯器。你可以使用易語言,絕對可以達到你的要求。但是從技術的角度來講,lex和yacc的技術高度遠高於易語言,畢竟lex和yacc號稱編譯器的編譯器,編譯器之母。
『叄』 (高分)求一個正確lex和yacc編的計算器(編譯原理)
網上多的是,大多可以運行。關鍵是你要在Linux下分別將 lex和yacc文件用 flex 和 bison 編譯成對應的c文件,然後在windows下用VC或者Codeblock的IDE下編寫界面,連接剛才對應的c文件,生成exe交給老師。