[英]How do Java, C++, C#, etc. get around this particular syntactic ambiguity with < and >?
我曾经认为 C++ 是一个“奇怪的”,具有<
和>
所有歧义,但是在尝试实现解析器之后,我想我找到了一个示例,该示例几乎破坏了将<
和>
用于泛型类型的所有语言:
f(g<h, i>(j));
这在语法上可以解释为泛型方法调用 ( g
),也可以解释为给出f
两次比较的结果。
这些语言(尤其是 Java,我认为它应该是 LALR(1) 可解析的? )如何解决这种语法歧义?
我只是无法想象有任何非 hacky/context-free 的方式来处理这个问题,而且我对任何这样的语言如何可以是 context-free 感到困惑,更不用说 LALR(1)-parsable ...
(值得注意的是,即使是 GLR 解析器也无法在没有上下文的情况下为该语句返回单个解析!!)
java中的通用方法调用将是<h,i>g(j)
所以没有歧义:)
我只是无法想象有任何非 hacky/context-free 的方式来处理这个问题,而且我对任何这样的语言如何可以是 context-free 感到困惑,更不用说 LALR(1)-parsable ...
答案是它们不是(至少不是 Java 和 C++;我对 C# 知之甚少)。 您链接到的 Java 语法可以追溯到 1996 年,比引入泛型还早。
如需进一步讨论,请参阅C# 和 Java 语法是 LALR(x) 吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.