怎样的Java,C ++,C#等避开这种特殊的语法歧义与<和>?(How do Java

2019-08-07 10:09发布

我曾经认为C ++是“怪异”的一个与所有与歧义<> ,而是试图实现一个解析器我想我找到打破只是使用每一种语言的例子后, <>的泛型类型:

f(g<h, i>(j));

这可以要么被语法解释为一个通用的方法调用( g ),或者它可能被解释为给出f两个比较的结果。

如何这样的语言(尤其是Java的, 而且我认为他应该是LALR(1)-parsable? )解决这个歧义?

我不能想象处理这个问题的任何非哈克/上下文的方式,和我在任何这样的语言如何能上下文困惑,更不用说LALR(1)-parsable ...

(值得一提的,即使是GLR分析器不能与没有上下文这一说法返回一个解析!)

Answer 1:

在Java一个通用的方法调用。将<H,I>克(j)的,所以没有歧义:)



Answer 2:

我不能想象处理这个问题的任何非哈克/上下文的方式,和我在任何这样的语言如何能上下文困惑,更不用说LALR(1)-parsable ...

答案是,他们不是(至少不是Java和C ++,我不是很了解C#)。 您关联的历史可以追溯到1996年,已被引入泛型之前的方式Java的语法。

关于进一步的讨论,见是C#和Java语法LALR(x)的?



文章来源: How do Java, C++, C#, etc. get around this particular syntactic ambiguity with < and >?