2012-09-12 38 views
2

摘要:我希望爲我自己的語言設置左右頁邊距 - 排除語法檢查的代碼區域。xtext - 如何設置代碼區域,排除語法檢查

背景:使用xtext,我想創建漂亮的Cobol編輯器。到目前爲止,我完成了語法並遇到了利潤和評論方面的問題。

左邊距我可以包含在語法中:'\ n'到6之後!'\ n'字符。

這並不能解決我的問題。 SLComment從'*'開始於左起第7位。我會用'\ n''*' - >'\ n'規則來捕捉這個規則,一旦我不知何故排除每行中的前6個字符。

我不能把它作爲'*' - >'\ n',並委託位置檢查來驗證,因爲它搞亂了乘法規則,這當然使用'*'。在語法邊界規則之後放置註釋規則並不是一個解決方案,因爲這樣我就無法在代碼的第一行中捕獲邊距。

另外我知道我不會用語法規則解決右邊距問題(排除78位後的區域)。

我想有一種方法來干涉xtext正在檢查的文本,但還沒有找到解決方案或提示如何完成此操作。

還試圖找出是否可以通過預處理,但也沒有找到任何提示如何做到這一點。

或者也許一次可以使用兩個語法。額外的一個會得到每一行並隱藏邊距?

希望我能夠描述我面臨的問題以及我到目前爲止所嘗試的。

回答

0

我想你可以使用類似LINE_START_COMMENT終端規則的東西來捕捉每行的前6個字符,然後將其隱藏在文法中。

terminal LINE_START_COMMENT: 
    // Up to 6 chars that are NOT a new line 
    '\n' (!'\n')? (!'\n')? (!'\n')? (!'\n')? (!'\n')? (!'\n')? 
; 

然後,使用這種方法,我想你也應該修改您的全行註釋規則,喜歡的東西:

terminal FULL_LINE_COMMENT: 
    LINE_START_COMMENT '*' 
    (LINE_START_COMMENT '*' | !(LINE_START_COMMENT))+ 
    (LINE_START_COMMENT)? 
; 

在這裏,我已經定義了FULL_LINE_COMMENT以下LINE_START_COMMENT後結束。要檢查多個連續的註釋行,您必須接受任何不是評論終結符(本例中爲LINE_START_COMMENT)或LINE_START_COMMENT的任何註釋,並在其後面添加一個新的'*'。