1

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[...])

「システム」の後で解析に失敗しました。そして、私はこのエラーを受け取ります: line 2:1 extraneous input 'home[1] HOME-NEW' expected {, system', NL, WS}

これが機能しない理由を誰か知っていますか? 私は Antlr の初心者で、Antlr がどのように機能するのか本当に理解できていません! 皆さん、ありがとうございました !

4

1 に答える 1