Tôi có ngữ pháp .g4 cho vba/vb6 một trình phân tích cú pháp/phân tích cú pháp, nơi lexer bỏ qua các mã thông báo tiếp tục dòng - không bỏ qua chúng. Dưới đây là các quy tắc lexer trong câu hỏi:Mã không liên kết vi phạm ngữ pháp của tôi
LINE_CONTINUATION : ' ' '_' '\r'? '\n' -> skip;
Vấn đề này đang gây ra, đó là bất cứ khi nào một dòng liên tục bắt đầu từ cột 1, phân tích cú pháp thổi lên:
Sub Test() Debug.Print "Some text " & _ vbNewLine & "Some more text" End Sub
tôi nghĩ "Hey Tôi biết! Tôi sẽ chỉ xử lý trước chuỗi Tôi đang cho ăn ANTLR để chèn thêm khoảng trống trước dấu gạch dưới và thay đổi ngữ pháp để chấp nhận nó! "
Vì vậy, tôi đã thay đổi quy tắc như vậy:
LINE_CONTINUATION : WS? WS '_' NEWLINE -> skip;
NEWLINE : WS? ('\r'? '\n') WS?;
WS : [ \t]+;
... và mã kiểm tra vba trên đã cho tôi lỗi phân tích cú pháp này:
extraneous input 'vbNewLine' expecting WS
Còn bây giờ giải pháp duy nhất của tôi là để nói với tôi người dùng thụt lề mã của họ. Có cách nào tôi có thể sửa chữa quy tắc ngữ pháp đó không?
(Full VBA.g4 grammar file on GitHub)
Tại sao bạn không hợp nhất LINE_CONTINUATION thành WS? –
@IraBaxter 'WS' được sử dụng ở nhiều nơi khác. Ý anh là gì? –
Bạn về cơ bản muốn tiếp tục dòng được xử lý như khoảng trắng. OK, sau đó thêm ý nghĩa từ vựng tiếp tục dòng vào mã thông báo WS. –