2011-12-15 28 views
5

Tôi sử dụng các lớp Lexer và Parser được tạo bởi công cụ ANTLR (nhắm mục tiêu C#). Giả sử tôi đã phân tích cú pháp một số mã và có một cây AST cho nó. Điều gì xảy ra nếu một phần mã ban đầu của tôi đã thay đổi và tôi muốn cập nhật các phần tương ứng của cây? Có cách nào phổ biến để làm điều đó? Ví dụ: một dòng mã được chèn vào bên trong một số hàm chức năng. Và tôi muốn xây dựng lại chỉ một phần của cây đại diện cho chức năng này và cập nhật vị trí của các mã chức năng tiếp theoCây AST của ANTLR cập nhật

+0

Sau khi bạn đã thay đổi cây, bạn muốn làm gì tiếp theo? Tôi giả sử, tạo lại văn bản nguồn. Với nhận xét? Bố cục gốc? ...? –

+0

Tôi chỉ muốn có cây AST có liên quan. Hãy nói rằng tôi muốn quản lý intellisense cho một số IDE – Natalia

+0

Làm thế nào bạn sẽ biết những gì các bộ phận của AST của bạn thực sự bị ảnh hưởng bởi sự thay đổi? – stryba

Trả lời

1

Có một vài dự án ngoài đó thực hiện những gì bạn có thể muốn thực hiện. Nhưng tôi không biết liệu ANTLR có hỗ trợ điều này hay không. Bạn có thể xem: http://en.wikipedia.org/wiki/Incremental_compiler

Để chỉ đề xuất đánh dấu cú pháp, tôi khuyên bạn nên sử dụng cụm từ thông dụng cho mã thông báo khác trong cú pháp của bạn. (Nếu bạn cập nhật chỉ dòng bạn đang làm việc trên bạn sẽ không nhận được bất kỳ vấn đề hiệu suất.)

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