我正在尝试实现一个 Java-Python 翻译器。我正在使用 flex 来识别一些 java token 。我用这个正则表达式管理整数:
...
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(因此是算术表达式)?
最佳答案
正如评论中已经说过的,您需要引入一个 ++
token 。
你说你不需要处理一元运算符。即便如此,您仍然需要 token 。 5++67
在 Java 中是一个错误,因为 ++
是它自己的标记。如果不是,5++67
将相当于 5++67
。因此,如果您想在本例中得到与 Java 中相同的错误,您还需要有一个 ++
token - 即使您从未使用过它。
关于c - Java-Python 翻译器中求和运算的语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52237841/