0
모두. 내가 문자열을 구문 분석 할 때 나는 내 문제ANTLR4 문법, 규칙은 문장의 일부만을 받아들입니다.
을 발견 (그것이 더 큰 문법의 일부) 문법을 만든
'/'입력에서 어떠한 대안 4 : I 예외를00 */3,5 * * 5 미국/뉴욕
라인 (1)을 다음 없었다
내가 발견 한 것처럼 문제는 하위 문자열 /3,5가 "with_step_value"규칙과 완전히 구문 분석된다는 것인데, 파서가 첫 번째 sybmbol 만 가져 오는 대신. 하지만 왜? 내가 이해할 수있는 한, 가능한 한 긴 문자열로 구문 분석하고 "with_step_value"규칙에 만족하는보기의 관점에서 "/3,5"를 부분 문자열로 사용하려고 시도합니다.
그래서 문제가 발생하는 이유는 무엇이며 어떻게 수정해야합니까?
감사합니다, 블라디미르
, 문법과 사진이 규칙을
/*File trigger validator lexer */ lexer grammar CronPartLexer; INT_LIST: INTEGER (COMMA INTEGER)* ; INTERVAL : INTEGER DASH INTEGER ; INTEGER : [0-9]+ ; DASH : '-' ; SLASH : '/' ; COMMA : ',' ; UNDERSCORE : '_' ; ID : [a-zA-Z] [a-zA-Z0-9]* ; ASTERISK:'*'; WS : [ \t\r\n]+ -> skip ; grammar CronPartValidator; options { tokenVocab = CronPartLexer; } cron_part : minutes hours days_of_month month week_days time_zone?; minutes : with_step_value ; time_zone : timezone_part ( SLASH timezone_part )? ; timezone_part : ID ( UNDERSCORE ID )? ; hours : with_step_value ; // // days_of_month : with_step_value ; // month : with_step_value ; // week_days : with_step_value ; with_step_value: INT_LIST|ASTERISK|INTERVAL ((SLASH INT_LIST)?) ;
은'cron_part' 규칙은 무효이며 정의 된'minute' 규칙이 없다. 또한 두 이미지는 실제로 동일합니다. 게시 된 문법이 실제로보고 된 문제를 재현하는지 확인하십시오. – GRosenberg
죄송합니다. "분"규칙이 적용됩니다. 나는 문법에있다. –