2010-08-29 2 views
1

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

, чтобы использовать этот пример, я построил грамматики 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)))) 

ответ

3

Нгуен,

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

Java -jar ANTLR-3.2.jar yourGrammar.g -debug

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

Смежные вопросы