2010-11-01 29 views
8

Je n'arrive pas à faire fonctionner "@header" ou toute autre règle @ dans ANTLR. Avec un Grammer très basique, comme ceci:Utilisation de @header dans ANTLR

grammar test; 

options { 
    language = CSharp2; 
} 

@header { 
    using System.Collections.Generic; 
} 

tokens { 
    TEST; 
} 

something : TEST*; 

TEST : '0' .. '9'; 

Cela semble adhérer à la documentation de ANTLR et d'autres exemples en ligne, mais lorsque je tente de générer la sortie soit par ANTLRWorks v1.4 ou le pot de ANTLR v3. 2, j'obtiens l'erreur suivante:

Cannot generate the grammar because:

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

Ce que je ne peux pas sembler secouer. Je suis capable de générer le lexeur et l'analyseur avec succès sans le @header inclus dans la grammaire. J'ai la dernière version de Java sur 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)

Je suppose que cela est la pierre de quelque chose de simple et je suis juste aveugle, donc s'il vous plaît apporter des réponses évidentes.

Répondre

9

L'erreur est due au fait que ces blocs doivent apparaître dans un certain ordre.

  1. Options
  2. jetons
  3. @header
  4. @members

alors vos règles

+0

Vous avez raison, monsieur. Merci beaucoup. – Moxen

+0

Je crois que dans la prochaine version d'ANTLR (v4), l'ordre de ces blocs n'a pas d'importance. –