Пожалуйста, помогите мне создать дерево разбора из Java и ANTLR - PullRequest
1 голос
/ 29 августа 2010

Пожалуйста, помогите мне эту проблему: Я делаю пример на странице: http://www.antlr.org/wiki/pages/viewpage.action?pageId=1760

Чтобы использовать этот пример, я построил грамматику P на ANTLRWork 1.4 и сгенерировал код, чтобы иметь класс PLexer и PParser. Но когда я запускаю этот код на 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 Ответ

3 голосов
/ 31 августа 2010

Нгуен,

Чтобы сделать это, я обнаружил, что когда вы генерируете синтаксический анализатор и лексер, вам необходимо включить аргумент "-debug", например:

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

Таким образом, будет создан дополнительный конструктор.

...