以下是我的語法規則:如何獲取EObject在原始文檔中的位置(#行)?
Stmts: (stmts += Stmt ';')* ;
Stmt: Stmt1 | Stmt2 | Stmt3 ... ;
我想知道每個語句##是在第撐條語句和他們的確切位置(原文件#n行)。這樣我可以指出用戶犯錯時的位置。
我重寫驗證器的構造函數,並存儲一個HashMap <Stmt, Integer>
以獲得每個Stmt#是stmts中的#thstt(不知道這是否是正確的方式來執行...)。但是我不知道如何獲得他們的行號。
任何幫助?
如果我把任何@Check標註的方法我會得到'第一行 - 這種表述在此背景下不允許的,因爲它不 造成任何副作用。,我在哪裏做錯了? –
我不知道你在這裏輸入了哪個@Check註釋,但我想我可以解釋錯誤信息。如果你只把第一行寫入,你只能讀取一個值,但不能改變任何東西。所以,如果你對你讀的價值沒有做任何事情,那麼閱讀是毫無意義的。放入兩行,錯誤應該消失。 –
我知道發生了什麼......我使用的是xtext 2.4,xtext驗證器的默認語言是xtend而不是java。 xtend中的第一行應該是'val INode node = NodeModelUtils.getNode(o);'謝謝Stefan,這正是我想要的。 –