请帮我从java和ANTLR创建解析树

时间:2010-08-29 08:37:35

标签: java parsing build tree antlr

请帮我解决这个问题: 我在页面上做了示例:http://www.antlr.org/wiki/pages/viewpage.action?pageId=1760

为了使用这个例子,我在ANTLRWork 1.4上构建了语法P,并生成了代码PLexerPParser。 但是当我在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());     
    }  
}

出现错误:

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);

当我在builder中删除一个参数PParser(tokens,builder)时,找不到该错误。但我不知道如何运行以获得以下结果:

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

1 个答案:

答案 0 :(得分:3)

阮,

为了使这项工作,我发现当你生成解析器和词法分析器时,你需要包含“-debug”参数,如下所示:

  

java -jar antlr-3.2.jar yourGrammar.g -debug

这样,将构建额外的构造函数。