lex/yacc实现计算器
来源:互联网 发布:香港买mac转运到大陆 编辑:程序博客网 时间:2024/06/05 14:21
cal.y
%{#include <stdio.h>#include "lex.yy.c"#define YYSTYPE int int yyparse(void);%}%token INTEGER PLUS MINUS TIMES DIVIDE LP RP%%command : exp {printf("%d/n",$1);}exp: exp PLUS term {$$ = $1 + $3;} |exp MINUS term {$$ = $1 - $3;} |term {$$ = $1;} ;term : term TIMES factor {$$ = $1 * $3;} |term DIVIDE factor {$$ = $1/$3;} |factor {$$ = $1;} ;factor : INTEGER {$$ = $1;} | LP exp RP {$$ = $2;} ;%%int main(){ return yyparse();}void yyerror(char* s){ fprintf(stderr,"%s",s);}int yywrap(){ return 1; }
cal.l
%{#include<string.h> #include "y.tab.h" extern int yylval; %} numbers ([0-9])+ plus "+" minus "-" times "*" divide "/" lp "(" rp ")" delim [ /n/t] ws {delim}* %% {numbers} {sscanf(yytext, "%d", &yylval); return INTEGER;} {plus} {return PLUS;} {minus} {return MINUS;} {times} {return TIMES;} {divide} {return DIVIDE;} {lp} {return LP;} {rp} {return RP;} {ws} ; . {printf("Error");exit(1);} %%
使用方式:
yacc -d cal.y lex cal.lg++ -o cal y.tab.c
运行./cal 然后输入3+4 ctrl+D就可以看到结果了
1 0
- lex/yacc实现计算器
- 用lex和yacc实现的计算器
- lex与yacc(二)计算器的实现
- 学习yacc与lex--计算器实现练习
- Lex&yacc简单计算器
- 神奇的lua:lex和yacc实现计算器
- lex和yacc 入门-- 计算器
- 使用lex与yacc构建简单计算器
- lex yacc 创建一个桌面计算器
- 简易计算器(使用Lex和Yacc)
- Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行
- Yacc Lex
- lex & yacc
- lex&yacc
- Lex Yacc
- lex &yacc
- yacc & lex
- lex&yacc
- PHP Function usort
- 数据结构之红黑树
- View的事件传递机制总结
- 1003
- 解释型语言与编译型语言的区别
- lex/yacc实现计算器
- 系统设计面试题思路综述
- 链表中求倒数第k个节点
- [JAVA · 初级]:11.终结者-final
- 那些年,做的几个应用
- Cookie
- [Java]基础入门练习
- 小学生算术题
- POJ 3276 Face The Right Way(一维反转问题)