Раньше я думал, что С++ был "странным" со всеми неопределенностями с <
и >
, но после попытки реализовать парсер я думаю, что нашел пример, который разбивает примерно на каждый, который использует <
и >
для общих типов:
f(g<h, i>(j));
Это может быть синтаксически интерпретировано как общий вызов метода (g
), или его можно интерпретировать как предоставление f
результатов двух сравнений.
Как эти языки (особенно Java, которые, как я думал, должны были быть LALR (1) -parsable?) обойти эту синтаксическую двусмысленность?
Я просто не могу представить себе какой-либо хакерский/контекстно-свободный способ справиться с этим, и я озадачен тем, как любой такой язык может быть контекстно-свободным, не говоря уже о LALR (1) -parsable...
(Стоит отметить, что даже анализатор GLR не может вернуть один синтаксический анализ для этого оператора без контекста!!)