Java,C++,C#等如何利用<和>解决这种特殊的语法歧义?

Meh*_*dad 27 java grammar parsing context-free-grammar lr-grammar

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

f(g<h, i>(j));
Run Code Online (Sandbox Code Playgroud)

这可以在语法上解释为泛型方法call(g),也可以解释为给出f两次比较的结果.

这些语言(特别是Java,我认为应该是LALR(1) - 可解决的?)如何克服这种语法模糊性?

我无法想象任何非hacky/context-free方式来解决这个问题,我对这种语言如何无上下文感到困惑,更不用说LALR(1)-parsable ......

(值得注意的是,即使是GLR解析器也无法为此语句返回单个解析而没有上下文!!)

Zub*_*zub 4

java中的通用方法调用是<h,i>g(j)这样的,所以没有歧义:)