2012-05-02 2 views
5

최근에 The Definitive ANTLR Reference을 구입했으며 ANTLR을 사용하게되어 기쁩니다. 제 장의
,이 문법 도시되어확실한 ANTLR 참조 - 첫 번째 프로그램이 작동하지 않습니다.

grammar T; 

options { 
    language = Java; 
} 

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

난, (· G 확장자) 파일로 다운이 문법으로 복사 렉서 파서 생성 등과 같은 기본 클래스 생성 :

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

는 실제 오류가 없습니다,하지만 난 메인 클래스를 실행하고 입력 할 때 :

call foo; 

아무런 반응이 없습니다. "invoke foo"가 화면에 출력되어야하지만 아무 일도 일어나지 않습니다. 나는 한 권의 운동을 끝내지 않고 그 책을 계속하고 싶지 않습니다. 그것이 중요하다면 Eclipse에서 ANTLR 3.4를 사용하고있다. 죄송합니다. 쉬운 질문 인 것 같지만 ANTLR을 처음 사용합니다.

감사합니다,
오메르

+1

ANTLR에 오신 것을 환영합니다. 귀하의 질문은 초급자에게 매우 유용합니다. –

+0

책에 적힌대로 파일 끝 문자를 입력 했습니까? –

+0

아니, 나는 그런 생각을하지 못했다. Windows 시스템에서는 \ n, \ r 또는 \ r \ n입니까? 아니면 엔터 버튼을 누르기 만하면됩니까? – leaf

답변

6

당신은 EOF 문자를 입력해야합니다.

UNIX 기반 시스템의 경우는 Ctrl-D입니다.

Windows 기반 시스템의 경우 Ctrl-Z입니다.

EDIT

콘솔을 통해 입력을 입력하고,이 ANTLR 스트림으로 데이터를 판독하기 때문에, 그것은 EOF를 필요로한다. 나중에이 책에서 파일을 통해 데이터를 입력하고 파일의 EOF가 스트림을 종료합니다. 입력을 파일에 저장 한 다음 파일의 입력을 명령으로 파이프 할 수도 있습니다.