Antlr4 用括号代替换行符的语法是什么?

Antlr4 用括号代替换行符的语法是什么?,antlr4,Antlr4,例如,我正在尝试编写语法来解析DNS区域文件。资源记录通常由换行符分隔。但是,一条记录可以通过使用括号跨多行断开。例如: record1第1部分第2部分第3部分第4部分 或 record1第1部分(第2部分) 第三部分 第四部分 ) 我想不出如何允许括号存在于记录中的任何位置。这个如何(未经过彻底测试) 语法: grammar dns; file : (record|NL)+ EOF ; record : recordName recordPart+ (NL|EOF)

例如,我正在尝试编写语法来解析DNS区域文件。资源记录通常由换行符分隔。但是,一条记录可以通过使用括号跨多行断开。例如:

record1第1部分第2部分第3部分第4部分

record1第1部分(第2部分)
第三部分
第四部分
)

我想不出如何允许括号存在于记录中的任何位置。

这个如何(未经过彻底测试)

语法:

grammar dns;


file : (record|NL)+ EOF ;


record : recordName recordPart+ (NL|EOF)
       ;

recordName : Something;

recordPart
    :   '(' recordPartOrNewLine+ ')'
    |   Something
    ;

recordPartOrNewLine
    :   NL
    |   recordPart
    ;

Something : [a-zA-Z0-9:.]+; // adjust!
WS: [ \t]+ -> skip;
NL : ('\r'? '\n')|'\r';
Comment : ';' ~[\r\n]* -> skip;
测试用例(来自维基百科):

结果(大图):

example.com.       1800  IN  SOA  ns1.example.com. mailbox.example.com. (
                                            100   ; Seriennummer
                                            300   ; Refresh Time
                                            100   ; Retry Time
                                            6000  ; Expire Time
                                            600   ; negative Caching Zeit
                                           )
 example.com.       1800  IN  NS ns1.example.com.

 ns1.example.com.   1800  IN  A    172.27.182.17
 ns1.example.com.   1800  IN  AAAA 2001:db8::f:a
 www.example.com.   1800  IN  A    192.168.1.2
 www.example.com.   1800  IN  AAAA 2001:db8::1:2