Использование @header в ANTLR - PullRequest
       8

Использование @header в ANTLR

8 голосов
/ 01 ноября 2010

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

grammar test;

options {
     language = CSharp2;
}

@header {
    using System.Collections.Generic;
}

tokens {
  TEST;
}

something : TEST*;

TEST : '0' .. '9'; 

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

Невозможно сгенерировать грамматику, потому что:

ошибка (100): [путь] \ test.g: 11: 1 синтаксическая ошибка: antlr: [путь] \ test.g: 11: 1 неожиданный токен: токены {

Который я не могу поколебать. Я могу успешно генерировать лексер и парсер без @header, включенного в грамматику. У меня последняя версия Java на Windows:

Java-версия "1.6.0_22" Java (TM) SE Runtime Environment (сборка 1.6.0_22-b04) Клиентская виртуальная машина Java HotSpot (TM) (сборка 17.1-b03, смешанный режим, совместное использование)

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

1 Ответ

9 голосов
/ 01 ноября 2010

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

  1. опции
  2. лексема
  3. @ заголовок
  4. @ Участники

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

...