Herramientas de usuario

Herramientas del sitio


otros:antlr

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
otros:antlr [2013/01/30 17:19]
alfred [Apuntes]
otros:antlr [2020/05/09 09:25] (actual)
Línea 63: Línea 63:
   raw_input()   raw_input()
 } }
 +</​code>​
 +==== Sección @init ====
 +Para inicializar valores dentro de la clase del parser:
 +<​code>​
 +@init {
 +    self.line = {}
 +    self.line['​parameters'​] = {}
 +}
 +</​code>​
 +Luego podremos usarlas así:
 +<​code>​
 +logline returns [val]
 +    : globalmessage {val = self.line}
 +    | playerinfo {val = self.line}
 +    ;
 +</​code>​
 +Las reglas también pueden tener un init:
 +<​code>​
 +file returns [List<​List<​String>>​ data]
 +@init {data = new ArrayList<​List<​String>>​();​}
 +  :  (row {data.add($row.list);​})+ EOF
 +  ;
 </​code>​ </​code>​
 ===== Notas ===== ===== Notas =====
Línea 86: Línea 108:
   * Existe el método ''​getNumberOfSyntaxErrors''​ en el objeto parser. Indicará los errores de parsing, pero si se hace un apartado ''​@rulecatch''​ estos serán ignorados.   * Existe el método ''​getNumberOfSyntaxErrors''​ en el objeto parser. Indicará los errores de parsing, pero si se hace un apartado ''​@rulecatch''​ estos serán ignorados.
   * También pueden detectarse los errores en al ejecutarse una regla con ''​state.failed''​.   * También pueden detectarse los errores en al ejecutarse una regla con ''​state.failed''​.
 +Es importante definir antes lo que queremos que coincida:
 +<​code>​
 +BEGIN : '​begin'​ ;
 +ID : '​a'​..'​z'​ + ;
 +OTHER: . ; // match any other single character
 +</​code>​
 Cuando tengamos varias reglas con las que case lo introducido podremos hacer alias de los tokens (si únicamente fuese uno podríamos hacer ''​$PLAYER.text'':​ Cuando tengamos varias reglas con las que case lo introducido podremos hacer alias de los tokens (si únicamente fuese uno podríamos hacer ''​$PLAYER.text'':​
 <​code>​ <​code>​
Línea 142: Línea 170:
         | defvar { print '​var'​ }         | defvar { print '​var'​ }
         | .* { print '​lodemas'​ } ;         | .* { print '​lodemas'​ } ;
 +</​code>​
 +Un ejemplo para capturar excepciones:​
 +<​code>​
 +except RecognitionException,​ e: 
 +  print "​PARSING ERROR: "​+str(e)+"​ parsing :"​+str(self.input)
 +  pprint.pprint(e)
 +  pprint.pprint(self.input)
 </​code>​ </​code>​
 Atributos de tokens: Atributos de tokens:
Línea 149: Línea 184:
   * {{:​otros:​antlr:​antlr_python.pdf|Ejemplo con Python}}   * {{:​otros:​antlr:​antlr_python.pdf|Ejemplo con Python}}
   * {{:​otros:​antlr:​antlr-tutorial.pdf|Tutorial}}   * {{:​otros:​antlr:​antlr-tutorial.pdf|Tutorial}}
 +
 +==== Ejemplos míos ====
 +  * {{:​otros:​antlr:​gamelog.g.zip|GameLog v0}}
 ==== Links ==== ==== Links ====
 === General === === General ===
otros/antlr.1359566365.txt.gz · Última modificación: 2020/05/09 09:25 (editor externo)