我正在尝试使用 antlr4 解析 ssh 命令结果,但我无法弄清楚为什么这段代码不起作用,我不断收到“外部输入”错误。
这是我要解析的文件示例:
system
home[1] HOME-NEW
sp
cpu[1]
cpu[2]
home[2] SECOND-HOME
sp
cpu[1]
cpu[2]
这是我的语法文件:
listAll
: ( system | home | NL)*
;
elements
: (sp | cpu )*
;
home
: 'home[' number ']' value NL elements
;
system
: 'system' NL
;
sp
: 'sp' NL
;
cpu
: 'cpu[' number ']' NL
;
value
: VALUE
;
number
: INT
;
VALUE : STRING+;
STRING: ('a'..'z'|'A'..'Z'| '-' | ' ' | '(' | ')' | '/' | '.' | '[' | ']');
INT : ('0'..'9')+ ;
NL : '\r'? '\n';
WS : (' '|'\t')* {skip();} ;
入口点是“listAll”。这是我得到的结果:
(listAll \r\n (system system \r\n) home[1] HOME-NEW \r\n sp \r\n cpu[1] \r\n cpu[2] \r\n[...])
在“系统”之后解析失败。我得到这个错误:第 2:1 行无关输入'home[1] HOME-NEW'期待 {, system', NL, WS}
有谁知道为什么这不起作用?我是 Antlr 的初学者,我不确定我是否真的了解它的工作原理!谢谢你们 !