Java,C++,C#等如何通过<和>来克服这种特殊的语法歧义?
2022-09-01 13:27:16
我曾经认为C++是“奇怪”的,具有和的所有歧义,但是在尝试实现解析器之后,我认为我发现了一个示例,它几乎打破了几乎所有使用和泛型类型的语言:<
>
<
>
f(g<h, i>(j));
这可以在语法上解释为泛型方法调用(),也可以解释为给出两个比较的结果。g
f
这些语言(尤其是Java,我认为它应该是LALR(1)可解析的?)如何解决这种语法上的歧义?
我只是无法想象任何非黑客/上下文无关的处理方式,我对任何这样的语言如何与上下文无关感到困惑,更不用说LALR(1)可解析了......
(值得注意的是,即使是GLR解析器也无法在没有上下文的情况下为此语句返回单个解析!!)