Java-Python转换器中求和运算的语法问题

时间:2018-09-08 17:45:06

标签: c parsing compiler-construction syntax-error flex-lexer

我正在尝试实现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)?

1 个答案:

答案 0 :(得分:0)

正如评论中已经提到的那样,您需要引入一个++令牌。

您说您不需要处理一元运算符。即使这样,您仍然需要令牌。 5 ++67是Java中的错误,正是因为++是它自己的令牌。如果不是,则5 ++67等同于5 + +67。因此,在这种情况下,如果您希望获得与Java相同的错误,则即使您从未使用过,也需要具有++令牌。