📜  Lex程序实现一个简单的计算器

📅  最后修改于: 2021-05-28 02:04:21             🧑  作者: Mango

Lex是一个生成词法分析器的计算机程序。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。

用于执行LEX程序的命令为:

lex abc.l (abc is the file name)
cc lex.yy.c -efl
./a.out 

让我们看一下实现一个简单计算器的LEX程序。

例子:

Input : 
3+3
Output :
6.0

Input : 
5*4
Output : 
20.0 

下面是实现:

/*lex program to implement 
         - a simple calculator.*/
  
% {
  int op = 0,i;
  float a, b;
% }
  
dig [0-9]+|([0-9]*)"."([0-9]+)
add "+"
sub "-"
mul "*"
div "/"
pow "^"
ln \n
%%
  
/* digi() is a user defined function */
{dig} {digi();} 
{add} {op=1;}
{sub} {op=2;}
{mul} {op=3;}
{div} {op=4;}
{pow} {op=5;}
{ln} {printf("\n The Answer :%f\n\n",a);}
  
%%
digi()
{
 if(op==0)
  
/* atof() is used to convert 
      - the ASCII input to float */
 a=atof(yytext); 
  
 else
 {
 b=atof(yytext);
  
 switch(op)
 {
   case 1:a=a+b;
    break;
  
   case 2:a=a-b;
   break;
   
   case 3:a=a*b;
   break;
   
   case 4:a=a/b;
   break;
   
   case 5:for(i=a;b>1;b--)
   a=a*i;
   break;
  }
 op=0;
 }
}
  
main(int argv,char *argc[])
{
 yylex();
}
  
yywrap()
 {
  return 1;
 }

输出:

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。