一、背景
构建一个简单计算器,识别输入的计算表达式并计算结果。通过计算器程序 来说明 lex & yacc 的开发过程 和 Lex 的结构规范。
二、环境
➢ 系统: CentOS 7.5
➢ 编译器: gcc - 4.8.5
➢ lex: flex 2.5.37
➢ Yacc: bison (GNU Bison) 3.0.4
安装 flex 和 bison 。
yum install flex bison
如果在编译链接过程中出现以下错误:
/usr/bin/ld: cannot find -lfl
请重新安装flex:
yum remove flex
yum install flex
三、简单计算器实现
计算器实现整数的 +、-、*、/、% 五种简单运算。
词法分析程序 cal.l
%{
#include "cal.tab.h"
extern int yylval;
%}
%%
[0-9]+ { yylval = atoi(yytext); return NUMBER; }
[ \t] ; /* ignore white space */
\n return 0; /* logical EOF */
. return yytext[0];
%%
代码中定义了四条规则,前面的部分就是模式,处于一行的开始位置,后面部分是动作,也就是,输入中匹配到了这个模式的时候,对应进行什么动作