2013-05-06 32 views
13

Tôi đang sử dụng trả về cho các quy tắc phân tích cú pháp của tôi hoạt động cho tất cả quy tắc phân tích cú pháp ngoại trừ quy tắc đầu tiên. Nếu quy tắc phân tích cú pháp đầu tiên trong ngữ pháp của tôi sử dụng lợi nhuận khai ANTLR4 phàn nàn như sau:Dấu ngoặc kép với khai báo trả về quy tắc phân tích cú pháp đầu tiên trong ngữ pháp ANTLR4

mong ARG_ACTION khi phù hợp với một quy tắc

Nếu tôi thêm một quy tắc phân tích cú pháp trên mà không sử dụng "lợi nhuận" ANTLR không phàn nàn.

Ở đây bạn có một ngữ pháp giảm đến vấn đề:

grammar FirstParserRuleReturnIssue; 
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 
aRule returns [String s]: ID { $s = $ID.text; }; 

Tôi đã tìm kiếm để tìm một vai trò đặc biệt trong những nguyên tắc đầu tiên mà có thể giải thích hành vi nhưng không tìm thấy bất cứ điều gì. Nó là một lỗi? Tôi có bỏ lỡ một số hiểu biết không?

Trả lời

13

Bạn cần đặt quy tắc phân tích cú pháp (bắt đầu bằng chữ cái thường) trước quy tắc lexer (bắt đầu bằng chữ hoa) trong ngữ pháp của bạn. Sau khi gặp phải quy tắc lexer, [ kích hoạt một LEXER_CHAR_SET thay vì ARG_ACTION, do đó luồng mã thông báo được trình biên dịch nhìn thấy có vẻ như bạn đang truyền một tập hợp các ký tự có giá trị trả về.

+0

Điều này có vẻ giống như một lỗi trong ANTLR, phải không? –

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