2010-11-01 2 views
8

У меня возникли проблемы с получением «@header» или любого другого правила @ для работы в ANTLR. С очень простой грамматикой, как это:Использование @header в ANTLR

grammar test; 

options { 
    language = CSharp2; 
} 

@header { 
    using System.Collections.Generic; 
} 

tokens { 
    TEST; 
} 

something : TEST*; 

TEST : '0' .. '9'; 

Это, кажется, прилипает к ANTLR документации и различным другим примерам в Интернете, но когда я пытаюсь произвести вывод через любой ANTLRWorks v1.4 или ANTLR банку v3. 2, я получаю следующую ошибку:

Cannot generate the grammar because:

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

Который, по-видимому, не трясет. Я могу с успехом генерировать лексер и парсер без включенного в грамматику @header. У меня есть последняя версия Java на 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)

я предполагаю, что это что-то камень просто, и я просто слеп к нему, так что пожалуйста, принесите на очевидные ответы.

ответ

9

Ошибка в том, что эти блоки должны появляться в определенном порядке.

  1. опции
  2. лексемы
  3. @header
  4. @members

тогда ваши правила

+0

Вы правильно, сэр. Большое спасибо. – Moxen

+0

Я считаю, что в следующей версии ANTLR (v4) порядок этих блоков не имеет значения. –

 Смежные вопросы

  • Нет связанных вопросов^_^