2017-12-02 258 views
0

我有一個解析器規則定義爲:「」antlr4:令牌識別錯誤「。」點和其他標點符號

text: '"'.*?'"' ; 

然而這failes如果文本包含標點符號。

",;:!?./§/*-+)({}[]abc" 
line 1:1 token recognition error at: ',' 
line 1:2 token recognition error at: ';' 
line 1:4 token recognition error at: '!' 
line 1:5 token recognition error at: '?' 
line 1:6 token recognition error at: '.' 
line 1:7 token recognition error at: '/' 
line 1:8 token recognition error at: '§' 
line 1:9 token recognition error at: '/' 
line 1:10 token recognition error at: '*' 
line 1:11 token recognition error at: '-' 
line 1:12 token recognition error at: '+' 
line 1:13 token recognition error at: ')' 
line 1:14 token recognition error at: '(' 

奇怪的是,捲曲是公認的。 任何幫助接受什麼作爲字符串的一部分?

+0

可能是一個涉及語法中不同規則的問題,無意中嘗試使用該字符串。 'curlies'是一個暗示。嘗試轉儲令牌流。 – GRosenberg

回答

1

您需要text被定義爲這樣一個詞法規則:

TEXT: '"'.*?'"' ; 

如果解析器規則ANTLR使用通配符將匹配任何規則,而不是任何字符。

+0

確實......做得好先生 – dgan

+0

我是否應該總是爲每個解析器規則定義一個詞法分析規則? – dgan

+0

不... Lexer規則在那裏是爲了標記輸入字符和解析器規則在那裏以某種方式對這些標記進行分組 – Raven