stringtranslate.com

Analizador de precedencia simple

En informática , un analizador de precedencia simple es un tipo de analizador ascendente para gramáticas libres de contexto que sólo pueden ser utilizados por gramáticas de precedencia simple .

La implementación del analizador es bastante similar a la del analizador ascendente genérico . Una pila se utiliza para almacenar un prefijo viable de una forma de oración 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 desplazar o cuándo reducir .

Implementación

SearchProductionToReduce (pila)

Ejemplo

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

mi --> mi + T' | T'T' --> TT --> T * F | FF --> ( mi ' ) | númeromi' --> mi

num es una terminal y el lexer analiza cualquier número 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 ) $ CAMBIO$ ⋖ 2 ⋗ * ( 1 + 3 )$ REDUCIR (F -> núm)$ ⋖ F ⋗ * ( 1 + 3 )$ REDUCIR (T -> F)$ ⋖ T ≐ * ( 1 + 3 ) $ MAYÚS$ ⋖ T ≐ * ⋖ ( 1 + 3 ) $ MAYÚS$ ⋖ T ≐ * ⋖ ( ⋖ 1 + 3 ) $ MAYÚS$ ⋖ T ≐ * ⋖ ( ⋖ 1 ⋗ + 3 )$ REDUCIR 4× (F -> num) (T -> F) (T' -> T) (E ->T ')$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + 3 ) $ MAYÚS$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + ⋖ 3 ) $ MAYÚS$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + < 3 ⋗ )$ REDUCIR 3× (F -> num) (T -> F) (T' -> T)$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + ≐ T ⋗ )$ REDUCIR 2× (E -> E + T) (E' -> E)$ ⋖ T ≐ * ⋖ ( ≐ E ' ≐ ) $ MAYÚS$ ⋖ T ≐ * ⋖ ( ≐ E' ≐ ) ⋗ $ REDUCIR (F -> ( E' ))$ ⋖ T ≐ * ≐ F ⋗ $ REDUCIR (T -> T * F)$ ⋖ T ⋗ $ REDUCIR 2× (T' -> T) (E -> T')$ ⋖ E $ ACEPTAR

Referencias