2010-08-29 13 views
1

S'il vous plaît aidez-moi ce problème: je l'exemple sur la page: http://www.antlr.org/wiki/pages/viewpage.action?pageId=1760S'il vous plaît aidez-moi à créer Parse arbre de java et ANTLR

pour utiliser cet exemple, j'ai construit la grammaire P sur ANTLRWork 1.4 et générer le code pour avoir la classe PLexer et PParser. Mais quand je lance ce code sur Java Jcreator 4.5:

import org.antlr.runtime.*; 
import org.antlr.runtime.tree.*; 
import org.antlr.runtime.debug.*; 
import org.antlr.runtime.ANTLRStringStream; 
import org.antlr.runtime.CharStream; 
import ParserAndLexer.*; 

public class TestP { 
    public static void main (String[] args) throws Exception{ 
     ANTLRInputStream input=new ANTLRInputStream(System.in); 
     PLexer lexer=new PLexer(input); 
     CommonTokenStream tokens=new CommonTokenStream(lexer); 
     ParseTreeBuilder builder=new ParseTreeBuilder("prog"); 
     PParser parser=new PParser(tokens,builder); 
     parser.prog(); 
     System.out.println(builder.getTree().toStringTree());  
    } 
} 

l'erreur apparaît:

D:\CAO HOC\TAI LIEU THAM KHAO\ANTLR-EBNF\CREATE PARSTREE\TestP.java:14: 
cannot find symbol 
symbol : constructor PParser(org.antlr.runtime.CommonTokenStream,org.antlr.runtime.debug.ParseTreeBuilder) 
location: class ParserAndLexer.PParser 
    PParser parser=new PParser(tokens,builder); 

Lorsque je laisse tomber un argument builder dans PParser(tokens,builder) alors que l'erreur ne a trouvé. mais je ne sais pas comment courir pour avoir le résultat suivant:

java TestP 
int i; 
i=4; 
(<grammar prog> (prog (decl (type int) i ;) (stat i = (expr 4)))) 

Répondre

3

Nguyen,

Pour faire ce travail, je trouve que lorsque vous générez l'analyseur et lexer vous devez inclure le « - debug » argument comme ceci:

java jar antlr-3.2.jar yourGrammar.g debug

De cette façon , le constructeur supplémentaire sera construit.