簡易計算器(使用Lex和Yacc)

2021-08-03 17:48:23 字數 1353 閱讀 2987

借助lex的詞法分析和yacc的語法分析,製作乙個簡易的計算器。

詞法分析 mycalc.l

%

%}%%

"+"return add;

"-"return sub;

"*"return mul;

"/"return div;

"\n"

return cr;

"("return lb;

")"return rb;

([1-9][0-9]*)|0|([0-9]+\.[0-9]+)

[ \t] ;

. %%

lex mycalc.l 生成檔案 lex.yy.c

語法分析 mycal.y

%

%union

%token

double_literal

%token add sub mul div cr lb rb

%type

expression term primary_expression

%%line_list

: line

| line_list line

;line

: expression cr

;expression

: term

| expression add term

| expression sub term

;term

: primary_expression

| term mul primary_expression

| term div primary_expression

;primary_expression

: double_literal

| lb expression rb

;%%int yyerror(char const *str)

int main(void)

}

yacc -dv mycalc.y 生成檔案 y.tab.h y.tab.c y.output

為了方便編譯,加入乙個makefile檔案

mycalc: *.c *.h

cc -o mycalc *.c

*.c *.h : mycalc.l mycalc.y

echo " - gen .h .c file"

; lex mycalc.l

yacc -dv mycalc.y

clean:

rm mycalc

rm *.c *.h *.output

run:

./mycalc

lex與yacc 二 計算器的實現

2011年09月24日 18 44 24 ecbtnrt 閱讀數 4311 構建乙個c語言的編譯器並不是一件容易的事,我想每個人在學習編譯原理的時候並不會常見得它非常簡單.下面將會學習編譯器的兩個重要組成部分 詞法分析器flex和語法分析器yacc flex是gun實現的fast lex lexic...

lex與yacc 二 計算器的實現

2011年09月24日 18 44 24 ecbtnrt 閱讀數 4311 構建乙個c語言的編譯器並不是一件容易的事,我想每個人在學習編譯原理的時候並不會常見得它非常簡單.下面將會學習編譯器的兩個重要組成部分 詞法分析器flex和語法分析器yacc flex是gun實現的fast lex lexic...

lex與yacc 二 計算器的實現

2011年09月24日 18 44 24 ecbtnrt 閱讀數 4311 構建乙個c語言的編譯器並不是一件容易的事,我想每個人在學習編譯原理的時候並不會常見得它非常簡單.下面將會學習編譯器的兩個重要組成部分 詞法分析器flex和語法分析器yacc flex是gun實現的fast lex lexic...