我正在尝试实现Java-Python转换器。我正在使用flex来识别一些Java令牌。我使用此正则表达式管理整数:
...
digit [0-9]
number (\+|\-)?{digit}+
...
%%
...
{number} {yylval.i= atoi (yytext);return(NUMBER);}
"+" {return (ADD);}
在解析器中,我定义了这个生产:
ArithmeticExpression
: ExpressionStatement ADD ExpressionStatement
| ExpressionStatement SUB ExpressionStatement
| ExpressionStatement MULT ExpressionStatement
| ExpressionStatement DIV ExpressionStatement
| ExpressionStatement MOD ExpressionStatement
;
ExpressionStatement
: NUMBER
;
如果我输入这样的翻译表达式:
int a = 5 ++67; (syntax error in java)
如何处理这种情况,以使翻译者将5 ++ 67识别为错误而不是5 + +67(因此是ArithmeticExpression)?
最佳答案
正如评论中已经提到的那样,您需要引入一个++
令牌。
您说不需要处理一元运算符。即使这样,您仍然需要令牌。 5 ++67
是Java中的错误,正是因为++
是它自己的令牌。如果不是,则5 ++67
等同于5 + +67
。因此,在这种情况下,如果您希望获得与Java中相同的错误,则还需要具有++
令牌-即使您从未使用过它。