stringtranslate.com

Analizador de precedencia simple

En informática , un analizador sintáctico de precedencia simple es un tipo de analizador de abajo hacia arriba para gramáticas libres de contexto que solo pueden ser utilizadas por gramáticas de precedencia simple .

La implementación del analizador es bastante similar a la del analizador genérico ascendente . Se utiliza una pila para almacenar un prefijo viable de una forma oracional a partir de una derivación situada más a la derecha . Los símbolos ⋖, ≐ y ⋗ se utilizan para identificar el pivote y para saber cuándo cambiar o reducir .

Implementación

Búsqueda de producción para reducir (pila)

Ejemplo

Dado el siguiente lenguaje, que puede analizar expresiones aritméticas con las operaciones de multiplicación y suma:

E --> E + T' | T'T'--> TV --> V * F | FF --> ( E' ) | numMi' --> Mi

num es una terminal y el analizador léxico analiza cualquier entero como num ; E representa una expresión aritmética, T es un término y F es un factor.

y la tabla de análisis:

ACCIÓN DE ENTRADA DE PRECEDENCIA DE PILA$ ⋖ 2 * ( 1 + 3 )$ DESPLAZAMIENTO$ ⋖ 2 ⋗ * ( 1 + 3 )$ REDUCIR (F -> núm)$ ⋖ F ⋗ * ( 1 + 3 )$ REDUCIR (V -> F)$ ⋖ T ≐ * ( 1 + 3 )$ DESPLAZAMIENTO$ ⋖ T ≐ * ⋖ ( 1 + 3 )$ DESPLAZAMIENTO$ ⋖ T ≐ * ⋖ ( ⋖ 1 + 3 )$ DESPLAZAMIENTO$ ⋖ T ≐ * ⋖ ( ⋖ 1 ⋗ + 3 )$ REDUCIR 4× (F -> num) (T -> F) (T' -> T) (E ->T ')$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + 3 )$ DESPLAZAMIENTO$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + ⋖ 3 )$ DESPLAZAMIENTO$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + < 3 ⋗ )$ REDUCIR 3× (F -> num) (T -> F) (T' -> T)$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + ≐ T ⋗ )$ REDUCIR 2× (E -> E + T) (E' -> E)$ ⋖ T ≐ * ⋖ ( ≐ E' ≐ )$ DESPLAZAMIENTO$ ⋖ T ≐ * ⋖ ( ≐ E' ≐ ) ⋗ $ REDUCIR (F -> ( E' ))$ ⋖ T ≐ * ≐ F ⋗ $ REDUCIR (T -> T * F)$ ⋖ T ⋗ $ REDUCIR 2× (T' -> T) (E -> T')$ ⋖ E $ ACEPTAR

Referencias