Tôi đang tạo ngữ pháp đầu tiên với ANTLR và ANTLRWorks 2. Tôi hầu như đã hoàn thành ngữ pháp (nó nhận ra mã được viết bằng ngôn ngữ được mô tả và xây dựng các cây phân tích chính xác), nhưng tôi chưa bắt đầu bất cứ điều gì ngoài đó. Điều gì khiến tôi lo ngại là mỗi lần xuất hiện đầu tiên của một mã thông báo trong quy tắc phân tích cú pháp được gạch chân bằng một vệt màu vàng có nghĩa là "Định nghĩa mã thông báo ngụ ý trong quy tắc phân tích cú pháp"."Định nghĩa mã thông báo ngụ ý trong quy tắc phân tích cú pháp" có phải là điều đáng lo ngại không?
Ví dụ, trong quy tắc này, các 'var'
có mà squiggle:
variableDeclaration: 'var' IDENTIFIER ('=' expression)?;
Làm thế nào nó trông giống hệt:
Điều kỳ lạ là ANTLR bản thân dường như không nhớ những quy tắc này (khi thực hiện kiểm tra rig test, tôi không thể thấy bất kỳ cảnh báo nào trong đầu ra của trình phân tích cú pháp, chỉ cần một cái gì đó về phiên bản Java không chính xác đang được cài đặt trên máy của tôi), vì vậy nó chỉ là ANTLRWorks phàn nàn.
Có điều gì đó phải lo lắng hoặc tôi có nên bỏ qua những cảnh báo này không? Tôi có nên khai báo tất cả các mã thông báo một cách rõ ràng trong các quy tắc lexer không? Hầu hết các exaples trong kinh thánh chính thức The Defintive ANTLR Reference dường như được thực hiện chính xác cách tôi viết mã.
Ok, cảm ơn bạn, tôi sẽ xem xét việc này.Đối với việc tách mã hành động, có phải cái gì đó nằm ngoài "ngữ pháp kết hợp -> AST -> ngữ pháp cây với mã hành động" không? Tôi chỉ có cuốn sách cho v3, vì vậy nếu nó là một cái gì đó mới, là có bất kỳ bài báo trực tuyến giải thích nó? Tài liệu trực tuyến trên antlr.org dường như thiếu thông tin về sự khác biệt giữa v3 và v4. –
ANTLR 4 không còn bao gồm đầu ra = AST hoặc ngữ pháp cây. Thay vào đó, nó sử dụng các cây phân tích cú pháp với người nghe và/hoặc các giao diện khách truy cập được tạo tự động từ ngữ pháp phân tích cú pháp. –
Tôi nhận thấy rằng ANTLRWorks2 cũng ném cùng một thông báo này khi tôi vô tình sử dụng một mã thông báo được đánh dấu là một đoạn trong quy tắc phân tích cú pháp. Đây có phải là dự định hay nó sẽ hiển thị một lỗi khác? –