2010-11-01 75 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