实验要求:
参考范例程序, 用 Flex 和 Bison 实现一个功能更为强大的计算器,包含以下运算:
a) 加、减、乘、除运算
b) 乘方、开方运算
c) 位运算– 与 & 、或 |、非 ~...
d) 阶乘运算 !
源代码:
calc.lex:
%{
/*
* 一个简单计算器的Lex词法文件
*/
#include <stdlib.h>
void yyerror(char*);
%}
%%
/* a-z为变量 */
[a-z] {
yylval = *yytext - 'a';
return VARIABLE;
}
/* 整数 */
[0-9]+ {
yylval = atoi(yytext);
return INTEGER;
}
/* 运算符 */
[-+()=/*^#&|~SCTLEN%\n] {return *yytext;}
/* 空白被忽略 */
[ \t] ;
/* 其他字符都是非法的 */
. yyerror("无效的输入字符");
%%
int yywrap(void)
{
return 1;
}
clac.y: