【问题标题】:Syntax problem with sum operation in Java-Python translatorJava-Python翻译器中求和运算的语法问题
【发布时间】:2018-09-08 17:45:05
【问题描述】:

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

【问题讨论】:

  • 您需要将++ 设为令牌。
  • 如果您将"++" 添加为INCREMENT 令牌,我认为应该可以解决问题。
  • 我不必管理前缀运算符,我只需要管理二进制运算符

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


【解决方案1】:

正如cmets中已经说过的,你需要引入一个++令牌。

您说您不需要处理一元运算符。即便如此,您仍然需要令牌。 5 ++67 在 Java 中是一个错误,正是因为 ++ 是它自己的令牌。如果不是,5 ++67 将等同于 5 + +67。因此,如果您想在这种情况下得到与 Java 相同的错误,您还需要有一个 ++ 令牌 - 即使您从不使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多