借助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...