先嘗試用它來做乙個計算器(內容來自於自製程式語言——前橋和彌)
一、準備工作
關於flex, bsion工具,建議還是linux平台安裝使用比較方便,我在windows下嘗試過,太麻煩。
在ubuntu下安裝很簡單,只要執行下列語句即可:
sudo apt-get installflex bison
flex -h
bison -h
沒有報錯就說明安裝成功。
二、詞法分析部分
建立mycalc.l
1 %10 %}
11 %%12"
+"return
add;13"
-"return
sub;14"
*"return
mul;15"
/"return
div;16"
\n"return
cr;17 ([1-9][0-9]*)|0|([0-9]+\.[0-9]+)
23[ \t]
24.
28 %%
三、語法分析部分
建立mycalc.y
1 %6 %union
10 %token double_literal
11 %token add sub mul div cr
12 %type expression term primary_expression
13 %%
14line_list
15: line
16 |line_list line17;
18line
19: expression cr
2023
expression
24: term
25 |expression add term
2629 |expression sub term
3033;34
term
35: primary_expression
36 |term mul primary_expression
3740 |term div primary_expression
4144
primary_expression
45: double_literal46;
47 %%
48int
49 yyerror(char
const *str)
5055
56int main(void)57
66 }
四、生成執行檔案
bison --yacc -dv mycalc.yflex mycalc.y
gcc -o mycalc y.tab.c lex.yy.c
執行上述語句後,可以在目錄中看到mycalc程式。
五、測試
./mycalc1+3*5
>>16
qlexical error.
編譯原理學習總結
總結 首先,很開心能夠與老師完成這一學期的課程,感覺編譯原理這門課吧,有點和資料結構聯絡比較密切,因為好多知識點都是需要運用學的樹,圖來理解完成的,都需要先去理解才能掌握。當然比起資料結構來,編譯原理還是有許多東西需要去記住的。編譯原理不像是一門新的課程,更需要運用許多以前的知識和 知識。其中的lr...
編譯原理學習總結
這學期費老師帶著我們學習了編譯原理,這門課挺重要的,感覺就像是有種連線著整個計算機專業課的感覺。但是也挺難的,對於大神說還好,對我就太難了,理解不了,也不會應用,學的比較糟糕。內容感覺很抽象,不好理解。但經過乙個學期的死纏爛打還是有了點自己的體會和總結的。總的來說。編譯原理就是乙個翻譯 編譯的過程。...
編譯原理學習總結
第一章 是基本概念,讀完這一章是為了有個基本了解,這一章是很容易順利讀完的 第二章這一章介紹了書中很多重要的東西。這一章雖然也有些難理解的地方,但是跟後面比還是容易很多,很多東西都很基本,對編譯系統有個基本的理解。第三章 詞法分析 相比較語法分析,詞法分析相對比較簡單,就是乙個自動機系統,學完這一章...