Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
otros:compilers [2009/11/07 19:23] alfred |
otros:compilers [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== Compiladores ====== | ====== Compiladores ====== | ||
| Para crear un compilador necesitamos un analizador léxico (o //scanner//) analiza el texto, y un analizador sintáctico (o //parser//) el que analiza la estructura del texto y realiza las acciones necesarias según esta. El analizador léxico recorre el texto y va pasando las porciones útiles (//tokens//) al parser, este actuará según la estructura en la que estén colocados los tokens. | Para crear un compilador necesitamos un analizador léxico (o //scanner//) analiza el texto, y un analizador sintáctico (o //parser//) el que analiza la estructura del texto y realiza las acciones necesarias según esta. El analizador léxico recorre el texto y va pasando las porciones útiles (//tokens//) al parser, este actuará según la estructura en la que estén colocados los tokens. | ||
| - | * Para Java el creador de analizadores léxicos se llama [[#jflex|JFlex]] y el creador de parsers [[#cup|CUP]]. Estas son herramientas a las que se les pasa código y, a partir de este, generan el analizador o el parser. | + | * Para Java el creador de analizadores léxicos se llama [[#jflex|JFlex]] y el creador de parsers [[#cup|CUP]]. Estas son herramientas a las que se les pasa código y, a partir de este, generan el analizador o el parser. |
| + | * Los nombrados anteriormente son versiones de los primeros creadores Lex y Yacc. | ||
| + | * Actualmente existen otros generadores de parsers como son [[http://www.gnu.org/software/bison/|Bison]], [[http://www.antlr.org/|ANTLR]]... | ||
| ===== JFlex ===== | ===== JFlex ===== | ||
| Línea 289: | Línea 291: | ||
| </code> | </code> | ||
| {{otros:compilers:flex_and_cup.tar.gz|Aquí}} un par de ejemplos. | {{otros:compilers:flex_and_cup.tar.gz|Aquí}} un par de ejemplos. | ||
| + | |||
| Línea 301: | Línea 304: | ||
| <code> | <code> | ||
| terminal WORD, COMA, NUMBER, DOSPUNTOS, CORCHIZQ, CORCHDER; | terminal WORD, COMA, NUMBER, DOSPUNTOS, CORCHIZQ, CORCHDER; | ||
| - | |||
| terminal STARTPROGRAM, ENDPROGRAM, STARTCODE, ENDCODE, STARTDECVAR, ENDDECVAR, STARTMACRO, ENDMACRO, STARTDECMACRO, ENDDECMACRO; | terminal STARTPROGRAM, ENDPROGRAM, STARTCODE, ENDCODE, STARTDECVAR, ENDDECVAR, STARTMACRO, ENDMACRO, STARTDECMACRO, ENDDECMACRO; | ||
| - | |||
| terminal COMANDO, REGISTRO, TIPO; | terminal COMANDO, REGISTRO, TIPO; | ||
| - | |||
| - | |||
| - | |||
| nonterminal programa, name, bloccodi, codi, liniacodi, blocvariables, blocmacros, decvars, valor, macro, decmacros, etiqueta; | nonterminal programa, name, bloccodi, codi, liniacodi, blocvariables, blocmacros, decvars, valor, macro, decmacros, etiqueta; | ||
| - | |||
| nonterminal memaddr, operando1, operando2; | nonterminal memaddr, operando1, operando2; | ||
| - | |||
| </code> | </code> | ||
| Luego la creación de la gramática se haría con la estructura explicada anteriormente, pero con la siguiente sintaxis: | Luego la creación de la gramática se haría con la estructura explicada anteriormente, pero con la siguiente sintaxis: | ||
| Línea 356: | Línea 352: | ||
| ; | ; | ||
| </code> | </code> | ||
| - | Corresponde a una lista de expresiones donde | ||
| - | ===== Compiladores con Python ===== | + | |
| - | ===== Compiladores con .NET ===== | + | |
| + | |||
| + | |||
| + | ===== Notas ===== | ||
| + | * La herramienta de Python para generar analizadores léxicos y sintácticos es la denominada PLY (que se encuentra [[http://www.dabeaz.com/ply/index.html|aquí]]), su nombre viene de //Python Lex Yacc//. | ||
| + | |||