【发布时间】: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