Sau đây là những quy tắc ngữ pháp của tôi:cách nhận vị trí (# dòng) của EObject trong tài liệu gốc?
Stmts: (stmts += Stmt ';')* ;
Stmt: Stmt1 | Stmt2 | Stmt3 ... ;
Tôi muốn biết mỗi stmt # là # -thứ stmt trong stmts và chính xác vị trí của họ (# -thứ dòng trong tài liệu gốc). Như vậy tôi có thể chỉ ra vị trí khi người dùng mắc lỗi.
Tôi ghi đè trình xây dựng trình xác thực và lưu trữ HashMap <Stmt, Integer>
để nhận được mỗi Stmt # là #-Stmt in stmts (Không chắc chắn nếu đây là cách chính xác để thực hiện ...). Tuy nhiên tôi không có ý tưởng làm thế nào để có được số dòng của họ.
Bất kỳ trợ giúp nào?
Nếu tôi đặt dòng đầu tiên trong bất kỳ phương pháp chú thích @Check tôi sẽ nhận được '- biểu hiện này không được phép trong bối cảnh này, vì nó không gây bất kỳ tác dụng phụ .', tôi đã làm sai ở đâu? –
Tôi không biết @Check chú thích nào bạn đã đặt ở đây, nhưng tôi nghĩ tôi có thể giải thích thông báo lỗi. Nếu bạn chỉ đặt dòng đầu tiên vào, bạn chỉ đọc một giá trị, nhưng không thay đổi gì cả. Vì vậy, việc đọc là vô nghĩa, nếu bạn không làm bất cứ điều gì với giá trị bạn đọc. Đặt cả hai dòng và lỗi sẽ biến mất. –
Tôi biết chuyện gì đã xảy ra ... Tôi đang sử dụng xtext 2.4 và ngôn ngữ mặc định của trình xác thực xtext là xtend chứ không phải java. Dòng đầu tiên trong xtend phải là 'val INode node = NodeModelUtils.getNode (o);' Cảm ơn bạn Stefan, đó là chính xác những gì tôi muốn. –