vaguedad sintactica sinonimo que frases ejemplos chiste anfibologia ambiguo ambiguedad ambiguas java parsing grammar context-free-grammar lr

sintactica - ¿Cómo evitan Java, C++, C#, etc. esta particular ambigüedad sintáctica con<y>?



frases de ambiguedad (2)

Simplemente no puedo imaginar ninguna forma no-hacky / sin contexto de lidiar con esto, y estoy desconcertado por cómo cualquier lenguaje puede estar libre de contexto, y mucho menos LALR (1) -parsable ...

La respuesta es que no lo son (al menos no Java y C ++, sé muy poco sobre C #). La gramática de Java que enlazas data de 1996, mucho antes de que se introdujeran los genéricos.

Para mayor discusión, vea Are C # y Java Grammars LALR (x)?

Solía ​​pensar que C ++ era el "extraño" con todas las ambigüedades con < y > , pero después de intentar implementar un analizador, creo que encontré un ejemplo que rompe casi todos los idiomas que usan < y > para los tipos genéricos:

f(g<h, i>(j));

Esto podría interpretarse sintácticamente como una llamada al método genérico ( g ) o podría interpretarse como que da los resultados de dos comparaciones.

¿Cómo pueden estos lenguajes (especialmente Java, que pensé que se suponía que era LALR (1) -parsable? ) Esquivar esta ambigüedad sintáctica?

Simplemente no puedo imaginar ninguna forma no-hacky / sin contexto de lidiar con esto, y estoy desconcertado por cómo cualquier lenguaje puede estar libre de contexto, y mucho menos LALR (1) -parsable ...

(¡Vale la pena señalar que incluso un analizador de GLR no puede devolver un único análisis sintáctico para esta afirmación sin contexto!)


una llamada a un método genérico en Java sería <h, i> g (j) por lo que no hay ambigüedad :)