我正在读取一个文件,但是当我尝试使用像5+5
这样的表达式时,出现了语法错误。然而,如果我写成5 + 5
,它就可以正常工作。我对为什么会这样感到困惑?
这是我的词法分析器文件(我会省略主函数读取文件的部分):
%{
#include "y.tab.h"
#include "stdio.h"
#include <stdlib.h>
%}
%%
(\/\*([^*]|(\*+([^*/]|[\r\n])))*\*+\/)+ {}
\/\/[^\n]*\n {}
fd { return FD; }
[\r\t\n]+ {}
[ ]* {}
bk { return BK;}
setc {return SETC;}
[-+]?[0-9]+ { yylval = atoi(yytext); return NUMBER;}
fd[0-9]+ { }
rt {return RT;}
pink {return COLOR_TYPE;}
magenta {return COLOR_TYPE; }
if {return IF; }
ifelse {return IFELSE; }
\[ {return LBRACKET; }
\] {return RBRACKET; }
\< {return LESS_THAN; }
\> {return GREATER_THAN; }
\+ {return PLUS; }
\- {return MINUS; }
\/ {return DIVIDE; }
\* {return MULT; }
\( {return LPAREN;}
\) {return RPAREN;}
\= {return EQ;}
%%
这是我 yacc 文件中处理表达式的一部分:
expr : NUMBER { printf("EXPR-->NUMBER: %d\n", $1);}
|expr PLUS expr {$$ = $1 + $3; printf("EXPR-->expression PLUS expression: %d\n", $$);}
|expr DIVIDE expr {$$ = $1 / $3; printf("EXPR-->expression DIVIDE expression %d\n", $$);}
|expr MULT expr {$$ = $1 * $3; printf("EXPR-->expression MULTIPLY expression %d\n", $$);}
|expr MINUS expr {$$ = $1 - $3; printf("EXPR-->expression MINUS expression %d\n", $$);}
|COLOR_TYPE {printf("EXPR-->COLOR\n");}
;
问题会在词法分析文件中吗?