c - Java-Python翻译器中求和运算的语法问题
问题描述
我正在尝试实现一个 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 相同的错误,你还需要一个++
令牌——即使你从不使用它。
推荐阅读
- c# - OxyPlot 图形不更新
- tree - 平衡树的正确方法
- javascript - 如何在 Javascript 中将 XML 文件转换为 Document 对象?
- nativescript - Nativescript imagepicker .getImage() 不是函数错误
- vba - VBA 复制错误,将多个工作表导入中央工作簿数据库
- database - 无法从 azure 上已部署的 Web 应用程序保存到 azure 上已部署的数据库中
- java - 如何在 Java 8 中解析字符串 YYYYMMDD_HHMMSSZ
- javascript - 当另一个元素(类)为 display:none 时隐藏 .innerHTML;
- angular - Angular 6 - RouterLink 导航但不更改 URL
- ffmpeg - 使用 ffmpeg 处理流的解码数据时出错