sintactico retroceso recursivo recursividad predictivo por izquierda eliminar ejemplo descenso descendente con analizador analisis parsing theory

parsing - retroceso - ¿Por qué un manejador de analizador de descenso recursivo no puede dejar la recursión?



analizador sintactico descendente recursivo (2)

¿Podría alguien explicarme por qué los analizadores sintácticos de descenso recursivo no pueden funcionar con una gramática que contenga recursividad a la izquierda?


Para quien esté interesado

A ::= A B | A C | D | E

puede ser reescrito como:

A ::= (D | E) (B | C)*

La forma general de la transformación es: cualquiera de los disyuntos recursivos no izquierdos seguidos de cualquier número de disyuntos recursivos izquierdos sin el primer elemento.

Reformar el código de acción es un poco engañoso, pero creo que también puede ser plug-n-chug.


considerar:

A ::= A B

el código equivalente es

boolean A() { if (A()) { return B(); } return false; }

ver la recursión infinita?