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