2010-11-01 95 views
8

我无法让“@header”或任何其他@规则在ANTLR中工作。有了一个非常基本的语法,就像这样:在ANTLR中使用@header

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的情况下成功生成词法分析器和分析器。我已经在Windows上最新版本的Java:

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 2010-11-01 03:09:24

+0

我相信在ANTLR(v4)的下一个版本中,这些块的顺序并不重要。 – 2010-11-01 08:10:49