2010-11-01 8 views
8

Ich habe Probleme, die @header- oder eine andere @ -Regel in ANTLR zu verwenden. Mit einem sehr einfachen Grammatik, wie folgt aus:Verwenden von @header in ANTLR

grammar test; 

options { 
    language = CSharp2; 
} 

@header { 
    using System.Collections.Generic; 
} 

tokens { 
    TEST; 
} 

something : TEST*; 

TEST : '0' .. '9'; 

Dies scheint der ANTLR Dokumentation und verschiedene andere Beispiele online zu halten, aber wenn ich versuche, die Ausgabe entweder durch ANTLRWorks v1.4 oder ANTLR jar v3 zu erzeugen. 2, bekomme ich folgenden Fehler:

Cannot generate the grammar because:

error(100): [path]\test.g:11:1 syntax error: antlr: [path]\test.g:11:1 unexpected token: tokens {

Welche ich nicht zu erschüttern scheinen. Ich bin in der Lage, den Lexer und Parser erfolgreich zu erstellen, ohne dass der @ header in der Grammatik enthalten ist. Ich habe die neueste Version von Java unter Windows:

java version "1.6.0_22" Java(TM) SE Runtime Environment (build 1.6.0_22-b04) Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)

Ich nehme an, das etwas Stein einfach ist und ich bin es nur blind, so wenden Sie sich bitte an den offensichtlichen Antworten bringen.

Antwort

9

Der Fehler liegt darin, dass diese Blöcke in einer bestimmten Reihenfolge angezeigt werden müssen.

  1. Optionen
  2. Token
  3. @header
  4. @members

dann Regeln

+0

Sie sind richtig, Sir. Danke vielmals. – Moxen

+0

Ich glaube, dass in der nächsten Version von ANTLR (v4) die Reihenfolge dieser Blöcke keine Rolle spielt. –