2010-11-01 17 views
8

Mam problem z uruchomieniem reguły "@header" lub dowolnej innej reguły @ w ANTLR. Z bardzo podstawowym Grammer coś takiego:Używanie @header w ANTLR

grammar test; 

options { 
    language = CSharp2; 
} 

@header { 
    using System.Collections.Generic; 
} 

tokens { 
    TEST; 
} 

something : TEST*; 

TEST : '0' .. '9'; 

to wydaje się przylegać do dokumentacji antlr i różnych innych przykładów w Internecie, ale gdy próbuję wygenerować wyjście przez obu ANTLRWorks v1.4 lub v3 ANTLR słoiku. 2, pojawia się następujący błąd:

Cannot generate the grammar because:

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

Który nie mogę się trząść. Jestem w stanie wygenerować lexer i parser z powodzeniem bez nagłówka @header zawartego w gramatyce. Mam najnowszą wersję Java w systemie 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)

Zakładam, że to jest coś, kamień prosty i jestem po prostu ślepy na to, więc proszę przynieść na oczywistych odpowiedzi.

Odpowiedz

9

Błąd jest taki, że bloki te muszą pojawić się w określonej kolejności.

  1. Opcje
  2. tokeny
  3. @header
  4. @members

następnie Twoje zasady

+0

Masz rację, sir. Wielkie dzięki. – Moxen

+0

Wierzę, że w kolejnej wersji ANTLR (v4) kolejność tych bloków nie ma znaczenia. –