Tag: lr

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

我以前认为C ++是“奇怪的”,但是在使用<和>会有一些歧义,但在尝试实现解析器后,我想我找到了一个例子,它打破了使用<和>作为generics类型的每种语言: f(g(j)); 这可以在语法上解释为generics方法调用( g ),或者可以解释为给出两个比较的结果。 这些语言(特别是Java, 我认为应该是LALR(1) – 可解决的? )如何克服这种语法模糊性? 我无法想象任何非hacky / context-free方式来解决这个问题,而且我对任何这样的语言如何无上下文感到困惑,更不用说LALR(1)-parsable …… (值得注意的是,即使是GLR解析器也无法为此语句返回单个解析而没有上下文!!)