我對lex和yacc有以下代碼。任何人都可以在印刷的聲明中看到額外的價值。代碼有什麼問題?lex和yacc來解析三角函數表達式
萊克斯代碼:
%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
[ \t] ;
[+-] { yylval=yytext; return Sym;}
(s|c|t)..x { yylval=yytext; return Str;}
[a-zA-Z]+ { printf("Invalid");}
%%
int yywrap()
{
return 1;
}
yacc的代碼:
%{
#include<stdio.h>
%}
%start exps
%token Sym Str
%%
exps: exps exp
| exp
;
exp : Str Sym Str {printf("%s",$1); printf("%s",$2); printf("%s",$3);}
;
%%
int main (void)
{
while(1){
return yyparse();
}
}
yyerror(char *err) {
fprintf(stderr, "%s\n",err);
}
輸入: sinx的+ cosx
輸出: sinx的+ cosx + cosxcosx
觀察輸出的代碼!
如果我要打印$ 1中。其印刷整個輸入sinx + cosx – PramodHegde