Lex y flex

Solo disponible en BuenasTareas
  • Páginas : 2 (312 palabras )
  • Descarga(s) : 0
  • Publicado : 19 de octubre de 2010
Leer documento completo
Vista previa del texto
6. Finalizando el analizador léxico-sintáctico
Una vez completada la implementación de nuestra gramática tan sólo nos queda probarla mediante el programa principal que ya comenzamos en apartadosanteriores. En esta ocasión vamos a modificarlo para que al finalizar el análisis nos muestre el árbol AST construido y la tabla de símbolos con nuestras variables y su información asociada.
01 usingSystem;
02 using Antlr.Runtime;
03 using Antlr.Runtime.Tree;
04 using Antlr.StringTemplate;
05 using System.Collections.Generic;
06
07 namespace PruAntlr
08 {
09 class Program
10 {
11 staticvoid Main(string[] args)
12 {
13 ANTLRFileStream input = new ANTLRFileStream("C:\pruantlr\prueba.fks");
14 FKVMLexer lexer = new FKVMLexer(input);
15
16 CommonTokenStream tokens = newCommonTokenStream(lexer);
17 FKVMParser parser = new FKVMParser(tokens);
18 FKVMParser.programa_return result = parser.programa();
19
20 if (parser.numErrors == 0)
21 {
22 CommonTree t =(CommonTree)result.Tree;
23
24 Console.WriteLine("Arbol AST:");
25 Console.WriteLine(t.ToStringTree() + "\n");
26
27 Console.WriteLine("Tabla de Simbolos:");
28
29 foreach (string k inparser.symtable.Keys)
30 {
31 Console.WriteLine(((Symbol)parser.symtable[k]).numvar +
32 " - " + k + " -> " + ((Symbol)parser.symtable[k]).type);
33 }
34 }
35 else
36 {
37 Console.WriteLine("Errores: " +parser.numErrors);
38 }
39
40 Console.ReadLine();
41 }
42 }
43 }
El árbol AST lo obtenemos mediante la propiedad Tree del objeto que representa a la regla principal de nuestra gramáticaprograma_return y lo imprimimos por pantalla mediante el método toStringTree(). Por su parte, a la tabla de símbolos podemos acceder como a un atributo más del objeto parser ya que la declaramos en la sección@members.
De esta forma, para el siguiente fichero de entrada:
program Prueba {
int a;
float b;
a = 1;
}
Obtendríamos la siguiente salida (la formateo para que sea legible):
Arbol AST:...
tracking img