LLG 1.07 Alfa
Enlaces patrocinados
LLG 1.07 Alfa: resumen
Rango
Haga clic en la estrella para clasificarRango nivel:
comentario de usuarios:
0 (0 times)
Descargar
Tamaño:
0.020 MB
Sistema operativo:
Any Platform
Licencia:
Perl Artistic License
Precio:
Descargars:
8867
Actualizado:
2007-07-16
Autor:
Optenet
Autor URL:
http://www.optenetpc.com/
LLG 1.07 Alfa: descripción
LLg es un generador de análisis de sintaxis de pendiente recurrente.
SINOPSIS
use LLg;
@tokens = (
ADDOP => [-+],
LEFTP => [(],
RIGHTP => [)],
NÚMERO ENTERO => 0 | [1-9] [0-9] *,
);
$reader = Lex-> nuevo (@tokens);
$ADDOP-> ajuste;
$expr = Y-> nuevo (($factor, Alguno-> nuevo ($ADDOP, $factor)),
suscripción {
cambio (_);
mi $result = cambio (_);
mi ($op, $integer);
mientras ($#_> = 0) {
($op, $integer) = (cambio (_), cambio (_));
si ($op eq +) {
$result + = $integer;
} más {
$result - = $integer;
}
}
$result;
});
$factor = O-> nuevo ($INTEGER, $parexp);
$parexp = Y-> nuevo ($LEFTP, $expr, $RIGHTP,
suscripción {$ _ [2]});
imprima STDERR "Tipo su expresión aritmética:";
imprima "el Resultado:", $expr-> después, "n";
La creación de analizadores sintácticos a mano es aburrida hasta para lenguas simples. Esta actividad puede ser automatizada por generadores de análisis de sintaxis - yacc es un ejemplo famoso. Pero la utilización de tales herramientas es completamente exigente y requiere knowlege razonable de los principios del análisis sintáctico.
LLg es un juego de paquetes Perl5 que permiten la generación de analizadores sintácticos de pendiente recurrentes para gramáticas sin contexto.
LLg es proveído de los paquetes Lex y Señal que son basados en el objeto. El uso de estos paquetes presupone que usted sabe escribir una gramática BNF y que usted sabe (sólo un poco) sobre la programación en Perl.
La especificación del analizador sintáctico no requiere ninguna extensión a la sintaxis Perl. La especificación es realizada completamente en Perl estándar, ser esto definición de señales, reglas sintácticas o asoció acciones semánticas. LLg permite la especificación fácil de esquemas de traducción, que es analizadores sintácticos para los cuales la acción semántica dan las acciones directamente asociadas con cada producción.
La Señal de paquetes y LLg permiten respectivamente la definición de objetos correspondiente a terminales (señales) y no terminales de la gramática. Lex se maneja la lectura "y la comida" de señales en la corriente de insumo.
Antes de usar estos paquetes usted tiene que definir una gramática BNF sin la recursión izquierda (un LL (1) gramática). Considerando esto, haciendo el analizador sintáctico consiste en:
1. cree un analizador léxico especificando los terminales,
2. cree un analizador sintáctico (analizador sintáctico) creando un objeto de LLg (o, más exactamente, uno de los paquetes que hereda de LLg) para cada uno no terminal.
3. defina la semántica asociando una función anónima con cada objeto de LLg.
Tome como unas expresiones de aritmética de ejemplo que tienen sólo + y - como operadores. En el libro de Camello encontramos la gramática siguiente:
expr:: = factor {factor de ADDOP}
ADDOP:: = + | -
factor:: = NÚMERO | (expr)
La creación del analizador sintáctico para esta lengua implica definir un analizador léxico y un analizador sintáctico.
El analizador léxico es definido thusly:
@tokens = (
ADDOP => [-+],
LEFTP => [(],
RIGHTP => [)],
NÚMERO ENTERO => [1-9] [0-9] *,
);
$reader = Lex-> nuevo (@tokens);
El argumento del método nuevo () es una lista de pares: la identidad del terminal y la expresión regular correspondiente. Cada tal par lleva a la creación de un terminal de la Señal de tipo.
El paquete LLg es el paquete bajo de un juego: Y, Alguno, Haga, Gancho, Opte, O. Estos paquetes permiten la creación de los tipos diferentes de reglas normalmente encontradas en gramáticas sin contexto. Usamos una nota de prefijo con las equivalencias siguientes.
Un | B O-> nuevo ($A, $B) símbolo A o símbolo B
Un B Y-> nuevo ($A, $B) símbolo un seguido de símbolo B
{A} Alguno-> nuevo ($A) número arbitrario de A
[A] Opte-> nuevo ($A) cero o un acontecimiento de A
Dan las reglas en nuestro ejemplo creando los objetos siguientes:
$expr = Y-> nuevo (($factor, Alguno-> nuevo ($ADDOP, $factor));
$factor = O-> nuevo ($NUMBER, $parexp);
$parexp = Y-> nuevo ($LEFTP, $expr, $RIGHTP);
Los argumentos del método nuevo () son referencias a LLg u objetos Simbólicos. (La orden por escrito de la regla no tiene ningún significado, ya que los escalares pueden ser referencias antes de que ellos sean adjudicados un valor. Estas referencias son resueltas cuando cada objeto está usado. Como los espectáculos de ejemplo, las referencias pueden ser obtenidas a los objetos devueltos por una regla.)
La semántica es definida poniendo una función anónima al final de lista de referencias de objeto. La función anónima usa la información asociada con los objetos. Esta información es transmitida por parámetros posicionales (la matriz _). El argumento enésimo designa el resultado del parámetro enésimo del método nuevo (). La información devuelta por la función tiene que ver con el objeto y es transmitida por medio de parámetros posicionales dondequiera que el objeto esté usado. En nuestro ejemplo tendremos:
$expr = Y-> nuevo (($factor, Alguno-> nuevo ($ADDOP, $factor)),
suscripción {
cambio (_);
mi $result = cambio (_);
mi ($op, $integer);
mientras ($#_> = 0) {
($op, $integer) = (cambio (_), cambio (_));
si ($op eq +) {
$result + = $integer;
} más {
$result - = $integer;
}
}
$result;
});
$factor = O-> nuevo ($INTEGER, $parexp);
$parexp = Y-> nuevo ($LEFTP, $expr, $RIGHTP,
suscripción {$ _ [2]});
imprima STDERR "Tipo su expresión aritmética:";
imprima "el Resultado:", $expr-> después, "n";
Cuando un número entero es reconocido es devuelto por la función anónima asociada con el $factor de objeto. Esta información devuelta (o, más exactamente, sintetizado, ya que esto viene de un terminal y es transmitido a no terminales) también está disponible en la función anónima asociada con el $expr de objeto. La información devuelta por el objeto siguiente es usada para calcular el valor de la expresión aritmética.
El analizador es inicializado aplicando el método después () al axioma de la gramática:
$expr-> después;
En ausencia el insumo para el análisis es leído del insumo estándar. El analizador sintáctico de ejemplo analiza e interpreta expresiones individuales tecleadas en el terminal. El ejemplo calculator.pl entregado con el paquete LLg muestra como crear una lectura de permiso de repetición de insumo e interpretación de arbitrario muchas expresiones.
El generador de análisis de sintaxis puede estar usado con otros objetivos que el análisis de una corriente de carácter. Considerando que los paquetes Lex, LLg y Señal, es absolutamente posible definir terminales que son objetos es decir casos de una clase además de la Señal. Cada nuevos terminales de definición de paquete deberían tener al menos el estado de métodos () y después () - ver vonkoch.pl como un ejemplo.
SINOPSIS
use LLg;
@tokens = (
ADDOP => [-+],
LEFTP => [(],
RIGHTP => [)],
NÚMERO ENTERO => 0 | [1-9] [0-9] *,
);
$reader = Lex-> nuevo (@tokens);
$ADDOP-> ajuste;
$expr = Y-> nuevo (($factor, Alguno-> nuevo ($ADDOP, $factor)),
suscripción {
cambio (_);
mi $result = cambio (_);
mi ($op, $integer);
mientras ($#_> = 0) {
($op, $integer) = (cambio (_), cambio (_));
si ($op eq +) {
$result + = $integer;
} más {
$result - = $integer;
}
}
$result;
});
$factor = O-> nuevo ($INTEGER, $parexp);
$parexp = Y-> nuevo ($LEFTP, $expr, $RIGHTP,
suscripción {$ _ [2]});
imprima STDERR "Tipo su expresión aritmética:";
imprima "el Resultado:", $expr-> después, "n";
La creación de analizadores sintácticos a mano es aburrida hasta para lenguas simples. Esta actividad puede ser automatizada por generadores de análisis de sintaxis - yacc es un ejemplo famoso. Pero la utilización de tales herramientas es completamente exigente y requiere knowlege razonable de los principios del análisis sintáctico.
LLg es un juego de paquetes Perl5 que permiten la generación de analizadores sintácticos de pendiente recurrentes para gramáticas sin contexto.
LLg es proveído de los paquetes Lex y Señal que son basados en el objeto. El uso de estos paquetes presupone que usted sabe escribir una gramática BNF y que usted sabe (sólo un poco) sobre la programación en Perl.
La especificación del analizador sintáctico no requiere ninguna extensión a la sintaxis Perl. La especificación es realizada completamente en Perl estándar, ser esto definición de señales, reglas sintácticas o asoció acciones semánticas. LLg permite la especificación fácil de esquemas de traducción, que es analizadores sintácticos para los cuales la acción semántica dan las acciones directamente asociadas con cada producción.
La Señal de paquetes y LLg permiten respectivamente la definición de objetos correspondiente a terminales (señales) y no terminales de la gramática. Lex se maneja la lectura "y la comida" de señales en la corriente de insumo.
Antes de usar estos paquetes usted tiene que definir una gramática BNF sin la recursión izquierda (un LL (1) gramática). Considerando esto, haciendo el analizador sintáctico consiste en:
1. cree un analizador léxico especificando los terminales,
2. cree un analizador sintáctico (analizador sintáctico) creando un objeto de LLg (o, más exactamente, uno de los paquetes que hereda de LLg) para cada uno no terminal.
3. defina la semántica asociando una función anónima con cada objeto de LLg.
Tome como unas expresiones de aritmética de ejemplo que tienen sólo + y - como operadores. En el libro de Camello encontramos la gramática siguiente:
expr:: = factor {factor de ADDOP}
ADDOP:: = + | -
factor:: = NÚMERO | (expr)
La creación del analizador sintáctico para esta lengua implica definir un analizador léxico y un analizador sintáctico.
El analizador léxico es definido thusly:
@tokens = (
ADDOP => [-+],
LEFTP => [(],
RIGHTP => [)],
NÚMERO ENTERO => [1-9] [0-9] *,
);
$reader = Lex-> nuevo (@tokens);
El argumento del método nuevo () es una lista de pares: la identidad del terminal y la expresión regular correspondiente. Cada tal par lleva a la creación de un terminal de la Señal de tipo.
El paquete LLg es el paquete bajo de un juego: Y, Alguno, Haga, Gancho, Opte, O. Estos paquetes permiten la creación de los tipos diferentes de reglas normalmente encontradas en gramáticas sin contexto. Usamos una nota de prefijo con las equivalencias siguientes.
Un | B O-> nuevo ($A, $B) símbolo A o símbolo B
Un B Y-> nuevo ($A, $B) símbolo un seguido de símbolo B
{A} Alguno-> nuevo ($A) número arbitrario de A
[A] Opte-> nuevo ($A) cero o un acontecimiento de A
Dan las reglas en nuestro ejemplo creando los objetos siguientes:
$expr = Y-> nuevo (($factor, Alguno-> nuevo ($ADDOP, $factor));
$factor = O-> nuevo ($NUMBER, $parexp);
$parexp = Y-> nuevo ($LEFTP, $expr, $RIGHTP);
Los argumentos del método nuevo () son referencias a LLg u objetos Simbólicos. (La orden por escrito de la regla no tiene ningún significado, ya que los escalares pueden ser referencias antes de que ellos sean adjudicados un valor. Estas referencias son resueltas cuando cada objeto está usado. Como los espectáculos de ejemplo, las referencias pueden ser obtenidas a los objetos devueltos por una regla.)
La semántica es definida poniendo una función anónima al final de lista de referencias de objeto. La función anónima usa la información asociada con los objetos. Esta información es transmitida por parámetros posicionales (la matriz _). El argumento enésimo designa el resultado del parámetro enésimo del método nuevo (). La información devuelta por la función tiene que ver con el objeto y es transmitida por medio de parámetros posicionales dondequiera que el objeto esté usado. En nuestro ejemplo tendremos:
$expr = Y-> nuevo (($factor, Alguno-> nuevo ($ADDOP, $factor)),
suscripción {
cambio (_);
mi $result = cambio (_);
mi ($op, $integer);
mientras ($#_> = 0) {
($op, $integer) = (cambio (_), cambio (_));
si ($op eq +) {
$result + = $integer;
} más {
$result - = $integer;
}
}
$result;
});
$factor = O-> nuevo ($INTEGER, $parexp);
$parexp = Y-> nuevo ($LEFTP, $expr, $RIGHTP,
suscripción {$ _ [2]});
imprima STDERR "Tipo su expresión aritmética:";
imprima "el Resultado:", $expr-> después, "n";
Cuando un número entero es reconocido es devuelto por la función anónima asociada con el $factor de objeto. Esta información devuelta (o, más exactamente, sintetizado, ya que esto viene de un terminal y es transmitido a no terminales) también está disponible en la función anónima asociada con el $expr de objeto. La información devuelta por el objeto siguiente es usada para calcular el valor de la expresión aritmética.
El analizador es inicializado aplicando el método después () al axioma de la gramática:
$expr-> después;
En ausencia el insumo para el análisis es leído del insumo estándar. El analizador sintáctico de ejemplo analiza e interpreta expresiones individuales tecleadas en el terminal. El ejemplo calculator.pl entregado con el paquete LLg muestra como crear una lectura de permiso de repetición de insumo e interpretación de arbitrario muchas expresiones.
El generador de análisis de sintaxis puede estar usado con otros objetivos que el análisis de una corriente de carácter. Considerando que los paquetes Lex, LLg y Señal, es absolutamente posible definir terminales que son objetos es decir casos de una clase además de la Señal. Cada nuevos terminales de definición de paquete deberían tener al menos el estado de métodos () y después () - ver vonkoch.pl como un ejemplo.
LLG 1.07 Alfa: Imagen
Enlaces patrocinados
LLG 1.07 Alfa: palabra clave
entero
recursiva ascendencia analizador
Recursivo ascendencia
nuevo
factor
analizador
resultado
objeto
1
07
alfa
LLG 1.07 Alfa
Bibliotecas
Programación
LLG 1.07 Alfa: Bookmark
LLG 1.07 Alfa: software relacionado
Mi Software
Usted no ha guardado ningún software.
relacionados con la búsqueda
Enlaces patrocinados
