2010-11-01 22 views
8

Ho problemi a far funzionare "@header" o qualsiasi altra regola @ in ANTLR. Con una grammatica molto semplice, in questo modo:Utilizzo di @header in ANTLR

grammar test; 

options { 
    language = CSharp2; 
} 

@header { 
    using System.Collections.Generic; 
} 

tokens { 
    TEST; 
} 

something : TEST*; 

TEST : '0' .. '9'; 

Questo sembra aderire alla documentazione ANTLR e vari altri esempi on-line, ma quando provo a generare l'output attraverso sia ANTLRWorks v1.4 o il barattolo ANTLR v3. 2, ho ricevuto il seguente errore:

Cannot generate the grammar because:

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

Che non riesco a scuotere. Sono in grado di generare il lexer e il parser senza l'@header incluso nella grammatica. Ho l'ultima versione di Java su 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)

Suppongo che questo è qualcosa di pietra semplice e io sono solo cieco ad esso, così si prega di portare sulle risposte ovvie.

risposta

9

L'errore è perché tali blocchi devono apparire in un determinato ordine.

  1. opzioni
  2. gettoni
  3. @header
  4. @members

poi le regole

+0

Lei ha ragione, signore. Grazie molto. – Moxen

+0

Credo che nella prossima versione di ANTLR (v4), l'ordine di questi blocchi non abbia importanza. –