diff options
| author | Juan Marín Noguera <juan.marinn@um.es> | 2020-09-16 11:46:28 +0200 |
|---|---|---|
| committer | Juan Marín Noguera <juan.marinn@um.es> | 2020-09-16 11:46:28 +0200 |
| commit | 54e65f3459477db4bfff3bd761de1af402d2db1b (patch) | |
| tree | a1a997f9bea33a60d5aeb532873cb5213f8c43d8 | |
| parent | 676dd9b2d601433c099433459186df3da20de0b4 (diff) | |
Errata in cc
| -rw-r--r-- | README.md | 8 | ||||
| -rw-r--r-- | cc/n1.lyx | 63 | ||||
| -rw-r--r-- | cc/n2.lyx | 87 | ||||
| -rw-r--r-- | cc/n3.lyx | 700 |
4 files changed, 526 insertions, 332 deletions
@@ -29,6 +29,7 @@ Se incluyen las siguientes asignaturas: * `cn`: Cálculo Numérico (sólo PDF). * `ol`: Optimización Lineal (sólo PDF). * `ga`: Grupos y Anillos. + * `ts`: Topología de Superficies. * `fvc`: Funciones de Variable Compleja (falta la primera parte). * De informática: * `fc`: Fundamentos de Computadores. @@ -45,14 +46,11 @@ Se incluyen las siguientes asignaturas: * `rc`: Redes de Comunicaciones (sólo PDF). * `aec`: Ampliación y Estructura de Computadores (sólo PDF). * `bd`: Bases de Datos. + * `cc`: Compiladores. * `ar`: Ampliación de Redes (sólo PDF). * `st`: Servicios Telemáticos. -En progreso: -* `cc`: Compiladores. -* `ts`: Topología de Superficies. - -## Venta benéfic +## Venta benéfia Si está en Murcia, puede comprar versiones impresas de los apuntes (ver imagen) por un mínimo de 5 euros la asignatura o 19 euros por 6 asignaturas, y **el 100% de los beneficios** se destina a @@ -85,7 +85,7 @@ Un \series bold lenguaje de programación \series default - es una notación formal para expresar algoritmo. + es una notación formal para expresar algoritmos. Distinguimos lenguajes: \end_layout @@ -114,11 +114,11 @@ De segunda generación \series bold ensambladores \series default -, creados al comienzo de los años 50, y que permiten usar abreviaturas mnemotécn -icas para representar las instrucciones de la máquina y códigos octales - o hexadecimales para valores. - También permiten crear macros, secuencias de instrucciones parametrizadas - para uso frecuente. +, creados al comienzo de los años 50, permiten usar abreviaturas mnemotécnicas + para representar las instrucciones de la máquina y códigos octales o hexadecima +les para valores. + También permiten macros, secuencias de instrucciones parametrizadas para + uso frecuente. \end_layout \begin_layout Enumerate @@ -240,7 +240,7 @@ Just-in-time JIT \series default ): Traduce código de una máquina abstracta a código de una máquina real - según se necesite durante la ejecución de dicho código. + según se necesite en la ejecución de dicho código. \end_layout \begin_layout Itemize @@ -587,8 +587,8 @@ análisis front-end \series default \emph default -: Se determina la estructura y el significado de un código fuente creando - una representación intermedia. +: Determina la estructura y el significado de un código fuente creando una + representación intermedia. \end_layout \begin_deeper @@ -597,13 +597,13 @@ front-end \series bold Análisis léxico \series default -: Se transforma un flujo de caracteres en un flujo de +: Transforma un flujo de caracteres en un flujo de \series bold \emph on tokens \series default \emph default -, que son identificadores de variables o funciones, palabras clave, constantes, +, identificadores de variables o funciones, palabras clave, constantes, operadores, etc. \end_layout @@ -612,19 +612,7 @@ tokens \series bold Análisis sintáctico \series default -: Se crea un árbol sintáctico que refleja la estructura gramatical del programa. - Si se parte del axioma de la gramática y se va construyendo el árbol de - análisis hacia abajo por derivaciones por la izquierda, se habla de análisis - -\series bold -descendente -\series default -, y si se parte de la entrada y se va generando el árbol hacia arriba por - reducciones por la izquierda, se habla de análisis -\series bold -ascendente -\series default -. +: Crea un árbol sintáctico que refleja la estructura gramatical del programa. Se usan autómatas con pila para reconocer una gramática libre de contexto normalmente recursiva, si bien la mayoría de lenguajes de programación son dependientes del contexto. @@ -635,9 +623,8 @@ ascendente \series bold Análisis semántico \series default -: Se verifican construcciones sintácticas que no se pueden tratar con gramáticas - libres de contexto y se calculan valores semánticos para garantizar la - generación de código correcto, creando un +: Realiza verificaciones que no se pueden incluir en gramáticas libres de + contexto y calcula valores semánticos, creando un \series bold árbol semántico \series default @@ -724,8 +711,8 @@ bootstrapping \end_layout \begin_layout Standard -Cuando un programa se divide en varios ficheros fuentes, la compilación - de cada uno produce un fichero objeto con código reubicable. +Cuando un programa se divide en varios ficheros fuente, en general la compilació +n de cada uno produce un fichero objeto con código reubicable. El \series bold enlazador @@ -1041,8 +1028,8 @@ regulares \end_layout \begin_layout Standard -Los lenguajes de un tipo también son de todos los anteriores, aunque muchos - lenguajes no son de tipo 0. +Los lenguajes de un tipo también son de todos los tipos anteriores, aunque + muchos lenguajes no son de tipo 0. La mayoría de lenguajes de programación son de tipo 1, aunque muchas de sus reglas gramaticales pueden reducirse al tipo 2 y, para los símbolos básicos, al tipo 3. @@ -1068,7 +1055,7 @@ lenguaje fuente y lo ejecuta inmediatamente, sin traducirlo a un código objeto. Es un buen método cuando el programador está trabajando de forma interactiva; el programa se va a utilizar pocas veces, con lo que el rendimiento no - es importante; se espera que cada instrucción se ejecuta una sola vez, + es importante; se espera que cada instrucción se ejecute una sola vez, y las instrucciones tienen un formato simple. \end_layout @@ -1216,9 +1203,9 @@ noprefix "false" \begin_layout Standard La interpretación de un programa en un lenguaje de alto nivel es unas 100 veces más lenta que la ejecución de un programa equivalente en código máquina, - por lo que esto no interesa cuando el programa se va a ejecutar en producción, - las instrucciones se van a ejecutar frecuentemente o las instrucciones - tienen formatos complicados. + por lo que esto no interesa cuando el programa se va a ejecutar en producción + ni cuando las instrucciones se van a ejecutar frecuentemente o tienen formatos + complicados. \end_layout \begin_layout Standard @@ -1258,8 +1245,8 @@ JVM ) es un lenguaje de este tipo, pues proporciona instrucciones que corresponden directamente a operaciones como creación de objetos, llamadas a métodos e indexado de matrices, facilitando la traducción de Java a código intermedio, - pero las instrucciones tienen un formato sencillo como las instrucciones - máquina, con campos de operación y operandos, facilitando la interpretación. + pero estas tienen un formato sencillo como las instrucciones máquina, con + campos de operación y operandos, facilitando la interpretación. El kit de desarrollo de Java ( \series bold JDK @@ -1277,7 +1264,7 @@ Un programa es \series bold portable \series default - si puede ser compilado y ejecutado en cualquier máquina en el código fuente. + si puede ser compilado y ejecutado en cualquier máquina. La \series bold portabilidad @@ -127,7 +127,7 @@ Un analizador léxico \series default es un programa que separa una secuencia de caracteres de entrada en lexemas - y genera una lista ordenada de + y genera una lista de \emph on tokens \emph default @@ -230,7 +230,7 @@ Toda expresión regular \begin_inset Formula $\alpha$ \end_inset - lleva asociado un lenguaje + lleva asociada un lenguaje \begin_inset Formula $L(\alpha)$ \end_inset @@ -271,11 +271,7 @@ Toda expresión regular \end_inset . - Un lenguaje es -\series bold -regular -\series default - si es el lenguaje asociado alguna expresión regular. + Un lenguaje es regular si es el asociado a alguna expresión regular. Dos expresiones regulares son \series bold equivalentes @@ -300,42 +296,42 @@ AFD \begin_inset Formula $(Q,V,\delta,q_{0},F)$ \end_inset - donde -\begin_inset Formula $Q$ -\end_inset - - es un conjunto finito de + formada por un conjunto finito de \series bold estados \series default -, -\begin_inset Formula $V$ + +\begin_inset Formula $Q$ \end_inset - es un alfabeto, -\begin_inset Formula $q_{0}\in Q$ +, un alfabeto +\begin_inset Formula $V$ \end_inset - es el +, un \series bold estado inicial \series default -, -\begin_inset Formula $F\subseteq Q$ + +\begin_inset Formula $q_{0}\in Q$ \end_inset - es el conjunto de +, un conjunto de \series bold estados finales \series default - y -\begin_inset Formula $\delta:D\subseteq(Q\times V)\to Q$ + +\begin_inset Formula $F\subseteq Q$ \end_inset - es la + y una \series bold función de transición \series default + +\begin_inset Formula $\delta:D\subseteq(Q\times V)\to Q$ +\end_inset + . \end_layout @@ -542,13 +538,13 @@ FICHERO \family typewriter fl \family default -, por ejemplo mediante la opción +, lo que en \family typewriter --lfl +gcc \family default - de + se hace con la opción \family typewriter -gcc +-lfl \family default . \begin_inset ERT @@ -591,14 +587,15 @@ Las \series bold palabras clave \series default -, que pueden estar +. + Están \series bold reservadas \series default -, en cuyo caso el usuario no puede modificar su significado y el analizador - léxico puede reconocerlas directamente, o no estarlo, en cuyo caso el analizado -r léxico debe reconocerlas como identificadores para que una fase posterior - las distinga. + si usuario no puede modificar su significado, en cuyo caso el analizador + léxico puede reconocerlas directamente. + Si no lo están, el analizador léxico debe reconocerlas como identificadores + para que una fase posterior las distinga. \end_layout \begin_layout Itemize @@ -606,12 +603,13 @@ Los operadores y signos de puntuación. \end_layout \begin_layout Itemize -Las constantes simples, como reales, enteros, caracteres o cadenas de caracteres. +Las constantes simples, como reales o enteros sin el signo, caracteres o + cadenas de caracteres. \end_layout \begin_layout Itemize -Los espacios en blanco y comentarios, aunque en general en analizador léxico - los ignora y no los devuelve. +Los espacios en blanco y comentarios, aunque en general el analizador léxico + los ignora, no los devuelve. \end_layout \begin_layout Standard @@ -636,7 +634,7 @@ Flex \family typewriter + \family default -, respectivamente, de 0–1, 0 o más y 1 o más repeticiones de lo anterior. +: respectivamente, de 0–1, 0 o más y 1 o más repeticiones de lo anterior. \end_layout @@ -726,8 +724,7 @@ También se puede agrupar con paréntesis \family typewriter ] \family default - indica disyunción entre los caracteres del conjunto indicado. - + indica disyunción entre los caracteres del conjunto indicado: \family typewriter \emph on a @@ -759,7 +756,7 @@ b \backslash \family default - indica caracteres de escape; + permite indicar caracteres de escape; \family typewriter [: \family default @@ -828,7 +825,7 @@ $ \family typewriter / \family default -, y cuando un lexema de una expresión regular puede ser prefijo de uno de +..., y cuando un lexema de una expresión regular puede ser prefijo de uno de otra. \emph on @@ -934,12 +931,16 @@ yylineno \family typewriter yymore() \family default - Indica que, la próxima vez que se lea un lexema, este se debería concatenar - al de + Indica a +\emph on +Flex +\emph default + que, la próxima vez que se lea un lexema, este se debería concatenar al + actual ( \family typewriter yytext \family default - en vez de reemplazarlo. +) en vez de reemplazarlo. \end_layout \begin_layout Description @@ -330,7 +330,7 @@ Un \begin_inset Formula $X\in V_{T}$ \end_inset - y el nodo es hoja, o bien + y el nodo es hoja, bien \begin_inset Formula $X\in V_{N}$ \end_inset @@ -359,9 +359,9 @@ ambigua \end_inset distintos tales que la sentencia es la concatenación ordenada de las etiquetas - de todos los nodos hoja, si y sólo si admite dos derivaciones más a la - izquierda distintas, si y sólo si admite dos derivaciones más a la derecha - distintas. + de todos los nodos hoja, si y sólo si esta admite dos derivaciones más + a la izquierda distintas, si y sólo si admite dos derivaciones más a la + derecha distintas. Una gramática es ambigua si tiene alguna sentencia ambigua. \end_layout @@ -458,8 +458,8 @@ S\to S_{e}\mid S_{ne};S_{e}\to iEtS_{e}eS_{e}\mid s;S_{ne}\to iEtS\mid iEtS_{e}e \end_inset -aunque esto no se suele hacer porque es más lento, y en su lugar se incluye - en el analizador sintáctico un caso especial. +aunque esto no se suele hacer porque es menos eficiente, y en su lugar se + incluye en el analizador un caso especial. \end_layout \begin_layout Standard @@ -626,7 +626,7 @@ lenguaje reconocido \end_layout \begin_layout Standard -Algunas características de los lenguajes de programación son no libres de +Algunas características de los lenguajes de programación no son libres de contexto: \end_layout @@ -652,11 +652,7 @@ Declaración de identificadores. \begin_inset Formula $w$ \end_inset - un uso del identificador, -\begin_inset Formula $L_{1}$ -\end_inset - - no es de tipo 2. + un uso del identificador, no es de tipo 2. \end_layout \begin_layout Itemize @@ -704,7 +700,7 @@ Métodos de análisis semántico \end_layout \begin_layout Standard -Pueden ser: +Suelen ser de estos tipos: \end_layout \begin_layout Enumerate @@ -735,7 +731,7 @@ generales \end_layout \begin_layout Standard -Dadas una GLC +Dada una GLC \begin_inset Formula $(V_{N},V_{T},P,S)$ \end_inset @@ -788,7 +784,7 @@ cup V_T}$.} \backslash -Para{$X +lPara{$X \backslash in V_T$}{$ \backslash @@ -875,9 +871,13 @@ in P$}{ \backslash Para{$i \backslash -in{1, +in +\backslash +{1, +\backslash +dots,k \backslash -dots,k}:Y_1 +}:Y_1 \backslash cdots Y_{i-1} \backslash @@ -1109,7 +1109,7 @@ lambda \backslash }$ a $ \backslash -textsf{SIGUIENTE}(X_k)$ +textsf{SIGUIENTE}(X_i)$ \backslash ; \end_layout @@ -1411,14 +1411,106 @@ Aceptar Error \emph default . + A veces se abrevia +\emph on +Desplazar +\begin_inset Formula $s$ +\end_inset + + +\emph default + como d +\begin_inset Formula $s$ +\end_inset + +, +\emph on +Reducir +\begin_inset Formula $A\to\beta$ +\end_inset + + +\emph default +, siendo +\begin_inset Formula $A\to\beta$ +\end_inset + + la regla +\begin_inset Formula $i$ +\end_inset + +-ésima, como r +\begin_inset Formula $i$ +\end_inset + +, y +\emph on +Aceptar +\emph default + como +\emph on +Acc +\emph default +, y se omite +\emph on +Error +\emph default + al representar la tabla. \end_layout \begin_layout Enumerate Una tabla -\begin_inset Formula $\mathsf{IrA}:S\times V_{N}\to S$ +\begin_inset Formula $\mathsf{IrA}:S\times V_{N}\to S\sqcup\{\emptyset\}$ +\end_inset + +. +\end_layout + +\begin_layout Standard +Una +\series bold +configuración +\series default + del analizador es un par +\begin_inset Formula $(s_{0}\,X_{1}\,s_{1}\,\dots\,X_{m}\,s_{m},a_{i}a_{i+1}\cdots a_{n}\$)$ +\end_inset + +, donde +\begin_inset Formula $s_{0},\dots,s_{m}\in S$ +\end_inset + + y +\begin_inset Formula $X_{1},\dots,X_{m}\in V_{N}\cup V_{T}$ +\end_inset + +, +\begin_inset Formula $a_{i},\dots,a_{n}\in V_{T}$ \end_inset . + El primer elemento del par es el +\series bold +contenido de la pila +\series default + y el segundo elemento es la cadena de símbolos de entrada que queda por + reconocer. + Ejecutar el analizador sobre una entrada es aplicar el algoritmo +\begin_inset CommandInset ref +LatexCommand ref +reference "alg:lr-analysis" +plural "false" +caps "false" +noprefix "false" + +\end_inset + +, que recibe una entrada y devuelve un árbol de derivación de esta si cumple + una cierta gramática +\begin_inset Formula $LR(1)$ +\end_inset + +, o bien encuentra un error. + Un analizador LR se puede convertir en un autómata de pila. \end_layout \begin_layout Standard @@ -1460,7 +1552,7 @@ Establecer la pila a $(s_0)$. \backslash 'imbolos de $V_T$ o $V_N$ sino \backslash -'arboles completos. +'arboles completos \backslash ; \end_layout @@ -1670,53 +1762,6 @@ Análisis sintáctico LR. \end_layout -\begin_layout Standard -Una -\series bold -configuración -\series default - del analizador es un par -\begin_inset Formula $(s_{0}\,X_{1}\,s_{1}\,\dots\,X_{m}\,s_{m},a_{i}a_{i+1}\cdots a_{n}\$)$ -\end_inset - -, donde -\begin_inset Formula $s_{0},\dots,s_{m}\in S$ -\end_inset - - y -\begin_inset Formula $X_{1},\dots,X_{m}\in V_{N}\cup V_{T}$ -\end_inset - -, -\begin_inset Formula $a_{i},\dots,a_{n}\in V_{T}$ -\end_inset - -. - El primer elemento del par es el -\series bold -contenido de la pila -\series default - y el segundo elemento es la cadena de símbolos de entrada que queda por - reconocer. - Ejecutar el analizador sobre una entrada es aplicar el algoritmo -\begin_inset CommandInset ref -LatexCommand ref -reference "alg:lr-analysis" -plural "false" -caps "false" -noprefix "false" - -\end_inset - -, que recibe una entrada y devuelve un árbol de derivación de esta si cumple - una cierta gramática -\begin_inset Formula $LR(1)$ -\end_inset - -, o bien encuentra un error. - Un analizador LR se puede convertir en un autómata de pila. -\end_layout - \begin_layout Subsection Método SLR \end_layout @@ -1781,6 +1826,91 @@ Llamamos \end_layout \begin_layout Standard +Llamamos +\series bold +gramática aumentada +\series default + o +\series bold +extendida +\series default + de +\begin_inset Formula $G$ +\end_inset + + a +\begin_inset Formula $(V_{N}\cup\{S'\},V_{T},P\cup\{S'\to S\},S')$ +\end_inset + +, donde +\begin_inset Formula $S'\notin V_{N}\cup V_{T}$ +\end_inset + +. + Definimos la +\series bold +clausura +\series default + de un conjunto +\begin_inset Formula $I$ +\end_inset + + de ítems, +\begin_inset Formula $\mathsf{Clausura}(I)$ +\end_inset + +, según el algoritmo +\begin_inset CommandInset ref +LatexCommand ref +reference "alg:clausura" +plural "false" +caps "false" +noprefix "false" + +\end_inset + +, y dados un conjunto de ítems +\begin_inset Formula $I$ +\end_inset + + y +\begin_inset Formula $X\in V_{N}\cup V_{T}$ +\end_inset + +, definimos +\family sans + +\begin_inset Formula +\[ +\mathsf{Goto}(I,X):=\mathsf{Clausura}(\{A\to\alpha X\cdot\beta\}_{A\to\alpha\cdot X\beta\in I}). +\] + +\end_inset + + +\family default +Con esto definimos la +\series bold +colección +\begin_inset Formula $LR(0)$ +\end_inset + + +\series default + según el algoritmo +\begin_inset CommandInset ref +LatexCommand ref +reference "alg:lr0-collection" +plural "false" +caps "false" +noprefix "false" + +\end_inset + +. +\end_layout + +\begin_layout Standard \begin_inset Float algorithm wide false sideways false @@ -1881,7 +2011,7 @@ name "alg:clausura" \end_inset -Cálculo de la clausura de un conjunto de ítems +Clausura de un conjunto de ítems \begin_inset Formula $LR(0)$ \end_inset @@ -1991,8 +2121,6 @@ neq emptyset$}{Añadir $ \backslash mathsf{Goto}(I,X)$ a $C$} -\backslash -; \end_layout \begin_layout Plain Layout @@ -2025,7 +2153,7 @@ name "alg:lr0-collection" \end_inset -Cálculo de la colección +Colección \begin_inset Formula $LR(0)$ \end_inset @@ -2043,88 +2171,6 @@ Cálculo de la colección \end_layout \begin_layout Standard -Llamamos -\series bold -gramática aumentada -\series default - o -\series bold -extendida -\series default - de -\begin_inset Formula $G$ -\end_inset - - a -\begin_inset Formula $(V_{N}\cup\{S'\},V_{T},P\cup\{S'\to S\},S')$ -\end_inset - -, donde -\begin_inset Formula $S'\notin V_{N}\cup V_{T}$ -\end_inset - -. - Definimos la -\series bold -clausura -\series default - de un conjunto -\begin_inset Formula $I$ -\end_inset - - de ítems, -\begin_inset Formula $\mathsf{Clausura}(I)$ -\end_inset - -, según el algoritmo -\begin_inset CommandInset ref -LatexCommand ref -reference "alg:clausura" -plural "false" -caps "false" -noprefix "false" - -\end_inset - -, y dados un conjunto de ítems -\begin_inset Formula $I$ -\end_inset - - y -\begin_inset Formula $X\in V_{N}\cup V_{T}$ -\end_inset - -, definimos -\family sans - -\begin_inset Formula $\mathsf{Goto}(I,X):=\mathsf{Clausura}(\{A\to\alpha X\cdot\beta\}_{A\to\alpha\cdot X\beta\in I})$ -\end_inset - -. - -\family default -Con esto definimos la -\series bold -colección -\begin_inset Formula $LR(0)$ -\end_inset - - -\series default - según el algoritmo -\begin_inset CommandInset ref -LatexCommand ref -reference "alg:lr0-collection" -plural "false" -caps "false" -noprefix "false" - -\end_inset - -. -\end_layout - -\begin_layout Standard Un ítem \begin_inset Formula $LR(0)$ \end_inset @@ -2138,11 +2184,11 @@ Un ítem válido \series default para un prefijo viable -\begin_inset Formula $\alpha\beta_{1}$ +\begin_inset Formula $\alpha\beta$ \end_inset si existe una derivación -\begin_inset Formula $S'\Rightarrow_{\text{md}}^{*}\alpha A\omega\Rightarrow_{\text{md}}\alpha\beta_{1}\beta_{2}\omega$ +\begin_inset Formula $S'\Rightarrow_{\text{md}}^{*}\alpha A\omega\Rightarrow_{\text{md}}\alpha\beta\gamma\omega$ \end_inset con @@ -2237,6 +2283,27 @@ in I$}{ \backslash +lSSi{$A +\backslash +to +\backslash +alpha +\backslash +cdot +\backslash +beta=S' +\backslash +to +\backslash +cdot S$}{$s +\backslash +gets I$} +\end_layout + +\begin_layout Plain Layout + + +\backslash uSSi{$| \backslash beta| @@ -2409,15 +2476,6 @@ to S$}} \begin_layout Plain Layout - $s -\backslash -gets I$ -\backslash -; -\end_layout - -\begin_layout Plain Layout - } \end_layout @@ -2495,7 +2553,26 @@ noprefix "false" si el método no genera conflictos. Toda gramática ambigua genera conflictos, pero no toda gramática que genera conflictos es ambigua. - Los conflictos pueden ser: +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +begin{samepage} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Los conflictos pueden ser: \end_layout \begin_layout Itemize @@ -2519,6 +2596,22 @@ En estos casos se puede especificar manualmente la acción a tomar o usar un método más potente. \end_layout +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +end{samepage} +\end_layout + +\end_inset + + +\end_layout + \begin_layout Subsection Método LR-canónico \end_layout @@ -2545,7 +2638,7 @@ Un \end_inset . - Este ítem es + Es \series bold válido \series default @@ -2581,6 +2674,37 @@ válido \end_layout \begin_layout Standard +Definimos la clausura de un conjunto de ítems +\begin_inset Formula $LR(1)$ +\end_inset + + según el algoritmo +\begin_inset CommandInset ref +LatexCommand ref +reference "alg:clausura-lr1" +plural "false" +caps "false" +noprefix "false" + +\end_inset + +, y para un conjunto de ítems +\begin_inset Formula $I$ +\end_inset + + y un +\begin_inset Formula $X\in V_{N}\cup V_{T}$ +\end_inset + +, llamamos +\begin_inset Formula $\mathsf{Goto}(I,X):=\mathsf{Clausura}(\{[A\to\alpha X\cdot\beta,a]\}_{[A\to\alpha\cdot X\beta,a]\in I})$ +\end_inset + +. + +\end_layout + +\begin_layout Standard \begin_inset Float algorithm wide false sideways false @@ -2641,26 +2765,26 @@ in J$}{ \backslash -Para{$B +Para{$b \backslash -to +in \backslash -gamma +mathsf{PRIMERO}( \backslash -in P$}{ +beta a)$}{ \end_layout \begin_layout Plain Layout \backslash -Para{$b +Para{$B \backslash -in +to \backslash -mathsf{PRIMERO}( +gamma \backslash -beta a)$}{ +in P$}{ \end_layout \begin_layout Plain Layout @@ -2711,7 +2835,7 @@ name "alg:clausura-lr1" \end_inset -Cálculo de la clausura de un conjunto de ítems +Clausura de un conjunto de ítems \begin_inset Formula $LR(1)$ \end_inset @@ -2729,37 +2853,6 @@ Cálculo de la clausura de un conjunto de ítems \end_layout \begin_layout Standard -Definimos la clausura de un conjunto de ítems -\begin_inset Formula $LR(1)$ -\end_inset - - según el algoritmo -\begin_inset CommandInset ref -LatexCommand ref -reference "alg:clausura-lr1" -plural "false" -caps "false" -noprefix "false" - -\end_inset - -, y para un conjunto de ítems -\begin_inset Formula $I$ -\end_inset - - y un -\begin_inset Formula $X\in V_{N}\cup V_{T}$ -\end_inset - -, llamamos -\begin_inset Formula $\mathsf{Goto}(I,X):=\mathsf{Clausura}(\{[A\to\alpha X\cdot\beta,a]\}_{[A\to\alpha\cdot X\beta,a]\in I})$ -\end_inset - -. - -\end_layout - -\begin_layout Standard El algoritmo para obtener la colección \begin_inset Formula $LR(1)$ \end_inset @@ -2789,7 +2882,7 @@ status open \backslash -Entrada{GLC aumentada con $S'$.} +Entrada{GLC $(V_T,V_N,P,S)$ aumentada con $S'$.} \end_layout \begin_layout Plain Layout @@ -2833,7 +2926,9 @@ acute on}(I,a) \backslash gets \backslash -emph{Error}$} +emph{Error +\backslash +/}$} \end_layout \begin_layout Plain Layout @@ -2857,6 +2952,27 @@ in I$}{ \backslash +lSSi{$A +\backslash +to +\backslash +alpha +\backslash +cdot +\backslash +beta=S' +\backslash +to +\backslash +cdot S$}{$s +\backslash +gets I$} +\end_layout + +\begin_layout Plain Layout + + +\backslash uSSi{$| \backslash beta| @@ -3031,15 +3147,6 @@ $]$}} \begin_layout Plain Layout - $s -\backslash -gets I$ -\backslash -; -\end_layout - -\begin_layout Plain Layout - } \end_layout @@ -3123,11 +3230,7 @@ Método LALR \begin_layout Standard Tiene una potencia intermedia entre el método LR-canónico y el SLR, y consigue una tabla de análisis de igual tamaño que con SLR. - -\end_layout - -\begin_layout Standard -Pasos: + Pasos: \end_layout \begin_layout Enumerate @@ -3159,7 +3262,7 @@ Si, para \begin_inset Formula $\rho(I)=\rho(J)$ \end_inset -, sustituimos +, sustituir \begin_inset Formula $I$ \end_inset @@ -3175,7 +3278,14 @@ Si, para \end_layout \begin_layout Enumerate -Aplicamos el método LR-canónico a la colección resultante. +Aplicar el método LR-canónico a la colección resultante. +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + \end_layout \begin_layout Standard @@ -3259,7 +3369,7 @@ shift-reduce \begin_deeper \begin_layout Standard -Si lo hubiera, habría +Si hubiera uno, habría \begin_inset Formula $\alpha,\beta,\gamma\in(V_{N}\cup V_{T})^{*}$ \end_inset @@ -3425,7 +3535,7 @@ Modo pánico: Se extraen pares de elementos de la pila hasta encontrar un \begin_inset Formula $s':=\mathsf{IrA}(s,A)$ \end_inset - definido, se introducen + definido, que no se llega a extraer; se introducen \begin_inset Formula $A$ \end_inset @@ -3433,12 +3543,12 @@ Modo pánico: Se extraen pares de elementos de la pila hasta encontrar un \begin_inset Formula $s'$ \end_inset - en la pila para simular una reducción y se descartan elementos de la entrada + en la pila para simular una reducción, y se descartan elementos de la entrada hasta encontrar un símbolo de \begin_inset Formula $\mathsf{Siguiente}(A)$ \end_inset -. +, que tampoco se descarta. \end_layout \begin_layout Section @@ -4478,6 +4588,13 @@ gets(V_N,P)$ \backslash +Repetir{no se cambie $P$}{ +\end_layout + +\begin_layout Plain Layout + + +\backslash Para{$i \backslash gets1$ @@ -4487,14 +4604,14 @@ KwA $n$}{ \begin_layout Plain Layout - + \backslash SSi{$A_i$ tiene producciones recursivas por la izquierda}{ \end_layout \begin_layout Plain Layout - Llamar a las producciones de $A_i$ como $A_i + Llamar a las producciones de $A_i$ como $A_i \backslash to A_i \backslash @@ -4529,7 +4646,7 @@ neq A_i$ para ningún $i$ \begin_layout Plain Layout - Dado un $A' + Dado un $A' \backslash notin V'_N \backslash @@ -4548,7 +4665,7 @@ cup \begin_layout Plain Layout - Sustituir las producciones de $A_i$ en $P'$ por + Sustituir las producciones de $A_i$ en $P'$ por \backslash \backslash @@ -4629,12 +4746,12 @@ alpha_mA' \begin_layout Plain Layout - } + } \end_layout \begin_layout Plain Layout - + \backslash Para{$j \backslash @@ -4645,9 +4762,9 @@ KwA $i-1$}{ \begin_layout Plain Layout - + \backslash -Para{$R:=(A_{i+1} +Para{$R:=(A_i \backslash to A_j \backslash @@ -4658,7 +4775,7 @@ in P'$}{ \begin_layout Plain Layout - Si las producciones de $A_j$ son $A_j + Si las producciones de $A_j$ son $A_j \backslash to \backslash @@ -4670,7 +4787,7 @@ dots \backslash mid \backslash -gamma_p$, sustituir $R$ por $A_{i+1} +gamma_p$, sustituir $R$ por $A_i \backslash to \backslash @@ -4693,6 +4810,11 @@ alpha$ \begin_layout Plain Layout + } +\end_layout + +\begin_layout Plain Layout + } \end_layout @@ -5206,6 +5328,13 @@ dots,Y_1$ en orden en $P$ \begin_layout Plain Layout + Devolver $a$ a la entrada +\backslash +; +\end_layout + +\begin_layout Plain Layout + Emitir la derivación por la izquierda dada por $X \backslash to Y_1 @@ -5261,12 +5390,12 @@ Ejecución de un analizador descendente no recursivo. \begin_layout Standard La ejecución de un analizador descendente predictivo no recursivo se hace con el algoritmo -\begin_inset Note Note -status open - -\begin_layout Plain Layout - -\end_layout +\begin_inset CommandInset ref +LatexCommand ref +reference "alg:descent-nr" +plural "false" +caps "false" +noprefix "false" \end_inset @@ -5289,6 +5418,12 @@ status open . \end_layout +\begin_layout Subsection +Conflictos +\family typewriter +if-then-else +\end_layout + \begin_layout Standard La gramática no ambigua que vimos para \family typewriter @@ -5317,10 +5452,14 @@ En este caso, factorizando la gramática \end_inset obtenemos -\begin_inset Formula $S\to iEtSS'\mid s;S'\to eS\mid\lambda;E\to x$ +\begin_inset Formula +\[ +S\to iEtSS'\mid s;S'\to eS\mid\lambda;E\to x, +\] + \end_inset -, que también es ambigua, y tenemos + que también es ambigua, y tenemos \begin_inset Formula \begin{align*} \mathsf{Predict}(S\to iEtSS') & =\{i\}, & \mathsf{Predict}(S\to s) & =\{s\},\\ @@ -5360,5 +5499,74 @@ if de la tabla de análisis. \end_layout +\begin_layout Subsection +Recuperación de errores +\end_layout + +\begin_layout Standard +Los errores que pueden surgir son que el terminal en la cima de la pila + no coincida con el de la entrada y que no haya una producción en la tabla + para la variable y el +\emph on +token +\emph default + de entrada. +\end_layout + +\begin_layout Standard +Recuperación: +\end_layout + +\begin_layout Itemize +A nivel de frase: En cada casilla en blanco de la tabla, que se amplía al + dominio +\begin_inset Formula $(V_{N}\cup V_{T})\times(V_{T}\cup\{\$\})$ +\end_inset + +, se añade una rutina de manejo del error, que hace operaciones como cambiar, + eliminar o añadir caracteres y emite un mensaje de error. + Esto es complicado, pues requiere considerar todos los casos de error posibles. +\end_layout + +\begin_layout Itemize +En modo pánico: Si el terminal en la cima de la pila no coincide con el + de la entrada, se extrae el de la cima de la pila pero no el de la entrada, + lo que simula la inserción de este en la entrada. + Si la tabla no tiene una producción para la variable +\begin_inset Formula $A$ +\end_inset + + de la pila y el +\emph on +token +\emph default + de entrada, se descartan +\emph on +tokens +\emph default + de la entrada hasta encontrar uno en +\begin_inset Formula $\mathsf{PRIMERO}(A)$ +\end_inset + +, en cuyo caso se continúa con el análisis, o en +\begin_inset Formula $\mathsf{SIGUIENTE}(A)$ +\end_inset + +, en cuyo caso se saca +\begin_inset Formula $A$ +\end_inset + + de la pila simulando así que se ha reconocido una cadena derivable de +\begin_inset Formula $A$ +\end_inset + +. + No se descarta el +\emph on +token +\emph default + de entrada que cumple la condición. +\end_layout + \end_body \end_document |
