Java-Python 翻译器中求和运算的语法问题
Syntax problem with sum operation in Java-Python translator
我正在尝试实现一个 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 中相同的错误,你还需要有一个 ++
令牌 - 即使你从未使用过它。
我正在尝试实现一个 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 中相同的错误,你还需要有一个 ++
令牌 - 即使你从未使用过它。