以下是YACC代码:法/野牛程序来计算表达式
%{
#include<stdio.h>
#include<math.h>
%}
%token NUMBER
%left '-' '+'
%left '*' '/'
%nonassoc UMINUS
%%
statement:expression {printf("Answer=%g\n",$1);}
;
expression:expression'+'expression {$$=$1+$3;}
|expression'-'expression {$$=$1-$3;}
|expression'*'expression {$$=$1*$3;}
|expression'/'expression {if($3==0)
yyerror("Divide by Zero");
else
$$=$1/$3;
}
|'-'expression %prec UMINUS {$$= -$2;}
|'('expression')' {$$=$2;}
|NUMBER {$$=$1;}
;
%%
int main(void)
{
printf("Enter the Expression");
yyparse();
printf("\n\n");
return 0;
}
int yyerror(char *error)
{
printf("%s\n",error);
return 0;
}
以下是法代码:
%{
#include<stdio.h>
#include "y.tab.h"
#define YYSTYPE double
extern int yylval;
%}
%%
[0-9]+|[0-9]*\.[0-9]+ { yylval=atof(yytext); return NUM;}
'\n' { return 0;}
'\t' {}
. {return yytext[0]; }
%%
int yywrap()
{
return 1;
}
我编译既lex和yacc代码。除少数警告外,没有明确的错误。但是当我运行可执行文件时,它显示的值不是0.000000。
为什么换行规则返回零?或者甚么事情?它是空白的。噪声。对解析器不重要。 – EJP