繁体   English   中英

Java、C++、C# 等如何通过 < 和 > 解决这种特殊的语法歧义?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM