2010-11-01 37 views
8

Tôi gặp sự cố khi nhận "@header" hoặc bất kỳ quy tắc @ nào khác hoạt động trong ANTLR. Với ngữ pháp rất cơ bản, như thế này:Sử dụng @header trong ANTLR

grammar test; 

options { 
    language = CSharp2; 
} 

@header { 
    using System.Collections.Generic; 
} 

tokens { 
    TEST; 
} 

something : TEST*; 

TEST : '0' .. '9'; 

Điều này dường như tuân theo các tài liệu ANTLR và các ví dụ khác nhau trên mạng, nhưng khi tôi cố gắng để tạo ra sản lượng thông qua một trong hai ANTLRWorks v1.4 hoặc v3 ANTLR jar. 2, tôi nhận được lỗi sau:

Cannot generate the grammar because:

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

Tôi dường như không thể lắc. Tôi có thể tạo lexer và phân tích cú pháp thành công mà không có @header được bao gồm trong ngữ pháp. Tôi có phiên bản Java mới nhất trên 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)

Tôi cho rằng đây là thứ gì đó đơn giản và tôi chỉ mù lòa với nó, vì vậy hãy đưa ra câu trả lời rõ ràng.

Trả lời

9

Lỗi là do các khối đó được yêu cầu xuất hiện theo một thứ tự nhất định.

  1. tùy chọn
  2. tokens
  3. @header
  4. @members

sau đó quy tắc của bạn

+0

Bạn là chính xác, thưa ông. Cảm ơn nhiều. – Moxen

+0

Tôi tin rằng trong phiên bản tiếp theo của ANTLR (v4), thứ tự của các khối này không quan trọng. –

Các vấn đề liên quan