1

如何不需要空格我使用ANTLR4,試圖解析以下文字:在ANTLR4

ex1, ex2: examples    
var1,var2,var3: variables  

由於第二行沒有逗號後的空白,它不正確解析。如果我加入空格,那麼它就可以工作。我目前使用的解析這個規則:

line : list ':' name; 
list : listitem (',' listitem)*; 
listitem : [a-zA-Z0-9]+; 
name : [a-zA-Z0-9]+; 

這完全適用於像線1線,但未能像線2號線,如果有括號或幾乎任何標點符號,它想後一些空白標點符號,我不能總是保證輸入。

有誰知道如何解決這個問題?

回答

3

首先添加明確的詞法分析規則(以大寫字母開頭)。然後爲空白添加一個詞法分析規則,並忽略空白:

line : list ':' name; 
list : listitem (',' listitem)*; 
listitem : Identifier; 
name : Identifier; 


Identifier : [a-zA-Z0-9]+; // only one lexer rule for name and listitem, since and Identifier may be a name or listitem depending only on the position 

WhiteSpace : (' '|'\t') -> skip; 
NewLine : ('\r'?'\n'|'\r') -> skip; // or don't skip if you need it as a statement terminator 
+0

好的,謝謝,這有幫助。你能向我解釋不同規則的大小寫之間的區別嗎?我沒有意識到它有所作爲...... – user3380049

+0

Lexer規則以大寫字母開頭,小寫的解析器規則。 Lexer創建令牌,解析器收集令牌。查看示例語法和/或閱讀本書。 – Onur