2012-05-02 13 views
5

Compré recientemente The Definitive ANTLR Reference y estoy emocionado de comenzar a usar ANTLR.
En el primer capítulo, se muestra esta gramática:La referencia ANTLR definitiva - Primer programa no funciona

grammar T; 

options { 
    language = Java; 
} 

r : 'call' ID ';' {System.out.println("invoke " + $ID.text);} ; 
ID : 'a'..'z'+ ; 
WS : (' '|'\n'|'\r')+ {$channel=HIDDEN;} ; 

Copié esta gramática abajo en un archivo, (extensión .G), generó la lexer y Parser, y ha creado una clase principal de este modo:

import org.antlr.runtime.*; 

public final class Test { 
    public static void main(String[] args) throws Exception { 
     ANTLRInputStream input = new ANTLRInputStream(System.in); 
     TLexer lexer = new TLexer(input); 
     CommonTokenStream tokens = new CommonTokenStream(lexer); 
     TParser parser = new TParser(tokens); 

     parser.r(); 
    } 
} 

no hay errores reales, pero cuando corro la clase principal e introduzca:

call foo; 

no pasa nada. "invoke foo" debe salir a la pantalla, pero no ocurre nada. No quiero continuar en el libro sin completar ningún ejercicio. Estoy usando ANTLR 3.4 en Eclipse si es importante. Lo siento si esto parece una pregunta fácil, pero soy nuevo en ANTLR.

Gracias,
Omer

+1

Bienvenido a ANTLR. Tu pregunta es muy válida para un principiante. –

+0

¿Ingresó el carácter de fin de archivo como se indica en el libro? –

+0

No, nunca pensé en eso. En un sistema Windows, ¿sería \ n, \ r o \ r \ n? ¿O solo presionando el botón enter? – leaf

Respuesta

6

es necesario introducir el carácter EOF.

Para sistemas basados ​​en UNIX es Ctrl-D.

Para sistemas basados ​​en Windows es Ctrl-Z.

EDITAR

Puesto que usted está entrando en la entrada a través de la consola, y antlr está leyendo los datos como un flujo, sino que precisa de la EOF. Más adelante en el libro estará ingresando datos a través de un archivo y el EOF del archivo terminará la transmisión. También puede guardar la entrada en un archivo y luego canalizar la entrada desde el archivo al comando.

Cuestiones relacionadas