2012-05-02 30 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;} ; 

Iは、ダウンファイルにこの文法をコピー(.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"を画面に出力する必要がありますが、何も起こりません。私は、1つのエクササイズを完了することなく本を続行したくない。私はEclipseでANTLR 3.4を使用しています。申し訳ありませんが、これは簡単な質問のようですが、私はANTLRを初めて利用しています。

おかげで、
オメル

+1

ANTLRへようこそ。あなたの質問は非常に初心者のために有効です。 –

+0

本に記載されているファイルの終わりの文字を入力しましたか? –

+0

いいえ、私はそれを考えませんでした。 Windowsシステムでは、それは\ n、\ r、または\ r \ nでしょうか?またはEnterボタンを押すだけですか? – leaf

答えて

6

あなたはEOF文字を入力する必要があります。

UNIXベースのシステムでは、Ctrl-Dです。

Windowsベースのシステムの場合はCtrl-Zです。

EDIT

コンソールを介して入力を入力している、とANTLRはストリームとしてデータを読んでいるので、それはEOFを必要とします。後で本でファイルを介してデータを入力し、ファイルのEOFがストリームを終了します。入力をファイルに保存し、ファイルからの入力をコマンドにパイプすることもできます。

関連する問題