我的.g4文件中有以下代碼。爲什麼在爲頻道分配標記時出現錯誤?
@lexer::members{
public static final int WHITESPACE = 1;
public static final int COMMENTS = 2;
}
WS : (' '|'\t'|'\f')+ -> channel(WHITESPACE)
;
COMMENT
: '//' ~('\n'|'\r')* -> channel(COMMENTS)
;
LINE_COMMENT
: '/*' .*? '*/' NEWLINE? -> channel(WHITESPACE)
;
我發現了以下錯誤:
警告(155):Shiro.g4:239:34:規則 'WS' 包含具有一個無法識別的恆定值的詞法分析器命令;詞法解釋器可能產生不正確的輸出
警告(155):Shiro.g4:243:38:規則'COMMENT'包含具有無法識別的常量值的詞法分析命令;詞法分析器可能產生不正確的輸出
警告(155):Shiro.g4:247:42:規則'LINE_COMMENT'包含帶無法識別的恆定值的詞法分析命令;詞法分析器可能產生不正確的輸出
這是Terrence在ANTLR4書中描述的將令牌放在不同通道上的技術。爲什麼我會收到這些警告?我應該擔心嗎?
你是對的。這是我的錯誤。我應該叫它警告。什麼是「詞法解釋器的輸出可能與生成的詞法分析器的輸出不匹配」。意思? –
@ 280Z28如果我明確設置了'public static final int CUSTOM = 2;',我可以忽略這個警告嗎? – petrbel
@petrbel不,在這種情況下,ANTLR代碼生成器在代碼生成時仍然不知道常量的值,這意味着警告仍然有效。當前抑制警告的唯一方法是在名爲'CUSTOM'的詞法分析器中定義一個標記(在'tokens {}'塊中)或一個模式。在這些情況下,您無法控制分配給該常量的數字值。 –