2017-05-31 35 views
1

假定下列輸入:HOWTO解析遊程長度編碼的二進制子格式與ANTLR

AA:4:2:@[email protected]:2:a: 

的部分@ 5 @限定與5.長度的二進制子格式的開始子格式可以包含任何類型的字符的並可能包含主要格式的令牌。 (例如,AA是主格式中的關鍵字/標記)。

我想建立一個能夠爲整個二進制部分提取一個標記的詞法分析器。

我已經嘗試過幾種方法(例如partials,sematic謂詞),但我沒有讓他們以正確的方式一起工作。

回答

0

最後,我自己找到了解決方案。

以下是在詞法分析器定義

@members { 
    public int _binLength; 
} 

BINARYHEAD: '@' [0-9]+ '@' { _binLength = Integer.parseInt(getText().substring(1,getText().length()-1)); } -> pushMode(RAW) ; 

mode RAW; 

BINARY: .+ {getText().length() <= _binLength}? -> popMode; 

該溶液是基於在解析二進制字段的長度定義中設置一個額外的場的相關部分。之後,使用語義謂詞將二進制內容的有效性限制爲該字段的大小。

任何建議簡化parseInt電話是值得歡迎的。