編譯原理利用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,老師上課說的編譯原理的階段說的是 詞法分析,語法分析,語義分析,中間 生成,優化,目標 生成 其中語法分析,語義分析,中間 生成稱為語法制導翻譯 語義分析,中間 生成稱...