2012-05-02 16 views
5

Son zamanlarda The Definitive ANTLR Reference satın aldım ve ANTLR kullanmaya başlamaktan heyecan duyuyorum. Birinci bölümde
, bu gramer gösterilmiştir:Definitive ANTLR Referans - İlk program çalışmıyor

grammar T; 

options { 
    language = Java; 
} 

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

Ben, (.g uzantısı), bir dosya içine aşağı bu dilbilgisi kopyalanan lexer ve Ayrıştırıcı oluşturulan ve böylece gibi bir ana sınıf oluşturuldu:

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

hiçbir gerçek hataları var, ama ana sınıfı çalıştırın ve girdiğinizde:

call foo; 

hiçbir şey olmuyor. "foo çağır" ekrana çıkarılmalıdır, ancak hiçbir şey olmuyor. Herhangi bir alıştırma yapmadan kitapta devam etmek istemiyorum. Önemlise, Eclipse'de ANTLR 3.4 kullanıyorum. Üzgünüz, bu kolay bir soru gibi görünüyorsa, ancak ANTLR için yeniyim.

sayesinde
Ömer

+1

ANTLR'ye hoş geldiniz. Sorunuz yeni başlayanlar için çok geçerlidir. –

+0

Dosya sonu karakterini kitapta yazdığı gibi mi girdiniz? –

+0

Hayır, bunu hiç düşünmedim. Bir Windows sisteminde, \ n, \ r veya \ r \ n olur mu? Veya sadece giriş düğmesine basmak mı? – leaf

cevap

6

Sen EOF karakterini girmeniz gerekir.

UNIX tabanlı sistemler için Ctrl-D'dur.

Windows tabanlı sistemler için Ctrl-Z'dur.

DÜZENLEME

konsola aracılığıyla girdi giriyoruz ve ANTLR bir akışı olarak veri okuma olduğundan, EOF ihtiyacı vardır. Daha sonra kitapta bir dosya aracılığıyla veri girecek ve dosyanın EOF akışı sona erecek. Girişi ayrıca bir dosyaya kaydedebilir ve daha sonra girdiyi dosyadan komut içine aktarabilirsiniz.

İlgili konular