編譯原理利用Flex Bison實現簡單計算器

2021-06-22 08:08:24 字數 1526 閱讀 1356

編譯原理利用flex+bison實現簡單計算器

一 實驗目的

1、掌握

yacc

的基本用法,並能夠根據語言給出語法規則的定義,最後生成語言的解析器;

2、使用使用

yacc

實現乙個高階計算器程式;

二 實驗內容

實現乙個簡單的表示式計算器,要求能進行加、減、乘、除、冪運算,注意優先順序。寫出詳細的步驟和源程式。

1、在linux中安裝flex和bison,使用如下命令:

sudo apt-get install flex 

sudo apt-get install bison 

2、編寫calculator.lex源程式

%

%% /* a-z為變數 */

[a-z]

/* 整數 */

[0-9]+

/* 運算子 */

[-+()=/*^sctl%\n]

/* 空白被忽略 */

[ \t] ;

/* 其他字元都是非法的 */

. yyerror("error 無效的輸入字元\n");

%%int yywrap(void)

3、編寫calculator.y源程式

%

%token integer variable

%left '+' '-'

%left '*' '/'

%left neg

%left '^'

%left 's' 'c' 't'

%left 'l'

%left '%'

%%program:

program statement '\n'|;

statement:

expr

|variable '=' expr

;expr:

integer

|variable

|expr '+' expr

|expr '-' expr

|expr '*' expr

|expr '/' expr

|'-'expr %prec neg

|expr '^' expr

|'s' expr

|'c' expr

|'t' expr

|'l' expr

|expr '%' expr

|'('expr')'

;%%void yyerror(char const *msg)

int main(void)

4、編譯

5、執行

Linux 編譯flex bison總結

end這個做了很久了,一直沒總結,今天以ubuntu18.04為例,總結一下步驟,沒有太多原理性的東西,希望能幫到編譯flex bison程式時出錯的小夥伴們。先解釋下,lex與yacc是兩個在unix下的分別作詞法分析和語法分析的工具,linux對應flex與bison。step1 安裝bison...

flex bison 編譯器雜談

flex與bison是編譯器設計工具。這裡的編譯器為廣義,其中包括一般的編譯器 指令碼解析器等,需要進行語言結構解析來得出意義的程式。當我們需要用乙個語言來設計一款編譯器時,需要考慮太多設計重心外的東西,如記憶體管理 模組設計 字元識別等,flex與bison就很好地為我們處理了這些事情,將設計重心...

編譯原理 編譯原理期末複習1

1,關於文法 乙個文法g可以抽象的分為四元組 vn,vt,p,s vn表示非終結符 vt表示終結符 p表示產生式 s表示開始符 2,老師上課說的編譯原理的階段說的是 詞法分析,語法分析,語義分析,中間 生成,優化,目標 生成 其中語法分析,語義分析,中間 生成稱為語法制導翻譯 語義分析,中間 生成稱...