我正在使用github上提供的ANTLR v4 Java语法。
我对我在特定规则中看到的内容有疑问:转移运算符。这些运算符声明如下:
('<' '<' | '>' '>' '>' | '>' '>')
我猜他们没有被宣布为
('<<' | '>>>' | '>>')
因为泛型类型声明可能会发生什么,如
class C<T extends I<T>>
最终的&gt;&gt;将被作为一个转变运营商。我对吗 ?现在我想知道的是:这个符号'&lt;' '&LT;'允许空格出现在两个“小于”的标志之间?
int a = 1 < < 2;
这是一个有效的输入?
提前致谢!
答案 0 :(得分:0)
解析器将接受1 < < 2
作为表达式,但是在生成解析树之后执行的侦听器将检查解析树中的移位运算符的每个实例,以确保该节点实际上是正确的结果源代码中使用的运算符。
@Override
public void enterShiftOperator(ShiftOperatorContext ctx) {
for (int i = 1; i < ctx.getChildCount(); i++) {
if (ctx.getChild(i).getTokenIndex() != ctx.getChild(i - 1).getTokenIndex() + 1) {
throw new UnsupportedOperationException("TODO: report error about incorrect operator in the source code");
}
}
}
备注:强>
-> skip
lexer命令的语法,因为这样做会影响分配给标记的索引。JavaUnicodeInputStream
没有为getText()
方法实现Unicode转换。