[英]ANTLR: Match unescaped characters?
我有一條規則,
charGroup
: '[' .+ ']';
但是我猜想它會匹配[abc\\]
類的東西。 假設我只希望它匹配未轉義的]
,我該怎么做? 在正則表達式中,我會使用負向后看。
編輯:如果可能的話,我也希望它不貪婪/懶惰。 以僅匹配[a]
在[a][b]
。
您可能想要執行以下操作:
charGroup
: '[' ('\\' . | ~('\\' | ']'))+ ']'
;
~('\\\\' | ']')
匹配\\
和]
以外的單個字符。 請注意,您只能取反單個字符! 沒有~('ab')
這樣的東西。 經常犯的另一個錯誤是,解析器規則內部的求反不會否定字符,而是否定令牌。 示例如下:
foo : ~(A | D);
A : 'a';
B : 'b';
C : 'c';
D : ~A;
現在,解析器規則foo
匹配令牌B
或令牌C
(因此僅匹配字符'b'
和'c'
),而詞法分析器規則D
匹配除'a'
之外'a'
任何字符。
我會在后面使用負數
那不是很復雜嗎? 怎么樣:
charGroup
: '[' ('\\]' | .)+ ']';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.