Poniższe są moje zasady gramatyczne:jak uzyskać lokalizację (# -ty wiersz) obiektu EObject w oryginalnym dokumencie?
Stmts: (stmts += Stmt ';')* ;
Stmt: Stmt1 | Stmt2 | Stmt3 ... ;
Chcę wiedzieć każdy stmt # jest # -tej stmt w stmts i dokładnie ich położenie (# -ty wiersz w oryginalnym dokumencie). Tak, że mogę wskazać lokalizację, gdy użytkownik popełnia błędy.
Zastępuję konstruktor walidatora i przechowuje HashMap <Stmt, Integer>
, aby uzyskać wszystkie Stmt # # -th Stmt w stmts (Nie jestem pewien, czy jest to prawidłowy sposób, ale ...). Jednak nie mam pojęcia, jak zdobyć numer linii.
Każda pomoc?
Jeśli mogę umieścić pierwszy wiersz w każdym @Check adnotacjami metody Wezmę '- To wyrażenie nie jest dozwolone w tym kontekście, ponieważ nie powoduje żadnych skutków ubocznych . "Gdzie popełniłem błąd? –
Nie wiem, którą adnotację @Check tu umieściłeś, ale myślę, że mogę wyjaśnić komunikat o błędzie. Jeśli wstawisz tylko pierwszy wiersz, czytasz tylko wartość, ale niczego nie zmieniasz. Czytanie nie ma sensu, jeśli nie robisz nic z wartością, którą czytasz. Wstaw obie linie, a błąd powinien zniknąć. –
Wiem, co się stało ... Używam xtext 2.4, a domyślnym językiem weryfikatora xtext jest xtend, a nie java. Pierwszą linią w xtend powinien być "val INode node = NodeModelUtils.getNode (o);" Dziękuję Stefan, właśnie tego chcę. –