2015-09-04 86 views
0

多行字符串我有一個語法看起來像這樣:解析與ANTLR

a: b c d ; 
b: x STRING y ; 

其中

STRING: '"' (~('"' | '\\' | '\r' | '\n') | '\\' ('"' | '\\'))* '"'; 

我的文件中包含一個「A」生產中的每一行,所以我現在的下降所有換行符。然而,我想要解析多行字符串,我該怎麼做?如果我只允許字符串中的'\ r'和'\ n',它不起作用。

回答

0

IIUC,你只是在尋找一個多行字符串詞法分析規則。事實上,你正在刪除換行確實不會影響字符串規則的構造。在詞法分析器考慮空白規則之前,符合字符串規則的換行符將在那裏被使用。

STRING : DQUOTE (STR_TEXT | EOL)* DQUOTE ; 
WS  : [ \t\r\n] -> skip; 

fragment STR_TEXT: (~["\r\n\\] | ESC_SEQ)+ ; 
fragment ESC_SEQ : '\\' ([btf"\\] | EOF) 
fragment DQUOTE : '"' ; 
fragment EOL  : '\r'? '\n' ;