我正在尝试实现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中相同的错误,则还需要具有++令牌-即使您从未使用过它。

10-05 23:51