antlr4를 사용하여 ssh 명령 결과를 구문 분석하려고하지만이 코드가 작동하지 않는 이유를 알 수 없으므로 "외부 입력"오류가 계속 발생합니다.Antlr4 - 멀티 라인 파일 용 파서 -
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'입니다 :
system
home[1] HOME-NEW
sp
cpu[1]
cpu[2]
home[2] SECOND-HOME
sp
cpu[1]
cpu[2]
가 여기 내 문법 파일입니다 : 여기
내가 구문 분석하는 데 노력하고있어 파일의 샘플입니다.(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'기대하는 시스템, NL, WS}
이것이 작동하지 않는 이유를 아는 사람이 있습니까? 저는 Antlr의 초보자입니다. 어떻게 작동하는지 정말 잘 모르겠습니다. 감사합니다.
을 통해 이동하는 것이 좋습니다 것입니다, 또한
나에게 많은 도움이, 대단히 감사합니다 :
여기에 완전한 문법이다. 내 실수는 값에 숫자가 포함될 수 있기 때문에 STRING 토큰에 '['와 ']'를 넣는 것이 었습니다. 따라서 '집 [1] EXAMPLE-1'과 같은 것이있을 때 집은 '집' 또는 '가치'. 코드가 잘 작동합니다! 그리고 탭, 스페이스 및 라인 끝을 건너 뛰는 팁을 주셔서 감사합니다. – zaphod
도와 주셔서 감사합니다 :) –