我曾经认为 C++ 是一个“奇怪”的语言,它与<
and有所有的歧义>
,但在尝试实现一个解析器之后,我想我找到了一个例子,它打破了几乎所有使用<
and>
泛型类型的语言:
f(g<h, i>(j));
这可以在语法上被解释为一个通用的方法调用(g
),或者它可以被解释为给出f
两个比较的结果。
这些语言(尤其是 Java,我认为它应该是 LALR(1) 可解析的?)如何解决这种句法歧义?
我只是无法想象任何非 hacky/上下文无关的方式来处理这个问题,而且我对任何这样的语言如何可以是上下文无关的感到困惑,更不用说 LALR(1) 可解析了......
(值得注意的是,即使是 GLR 解析器也无法在没有上下文的情况下为该语句返回单个解析!!)