1
我想使用antlr4來解析ssh命令結果,但我無法弄清楚爲什麼這段代碼不起作用,我不斷收到「無關輸入」錯誤。Antlr4 - 多行文件解析器 -
下面是該文件的樣本,我試圖解析:
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無關輸入'家'[1]家新'期待{,系統',NL,WS}
有誰知道爲什麼這不工作? 我是Antlr的初學者,我不確定我真的明白它是如何工作的! 謝謝大家!
非常感謝你,這對我幫助很大。我的錯誤是將'['和']'放在STRING標記中,因爲一個值可以包含一個數字,所以當我有'home [1] EXAMPLE-1'之類的東西時,家可以被解釋爲'家'或'價值'。你的代碼工作正常!並感謝提示跳過標籤,空間和行結束。 – zaphod
很高興幫助:) –