ANTLR 4의 의미 적 술어에 문제가 있습니다. 내 문법은 구문 적으로 모호하며 모호성을 해결하기 위해 하나의 토큰을 찾아야합니다.ANTLR4 술어 실패가 다음 대체 방법을 무시합니까?
예를 들어 "2012 년 1 월 19 일 오후 9 시까 지"를 "2012 년 1 월 19 일"으로 구문 분석하여 파서의 다음 토큰을 "until"으로 남겨 둡니다. 그리고 파서의 다음 토큰 "7"을 사용하여 "Jan 19, 7 pm 9시"를 "1 월 19 일"날짜로 구문 분석하려고합니다.
그래서 세 번째 토큰을 살펴보고 가져 가거나 두어야합니다.
내 문법 조각은 다음과 같습니다
date
: month d=INTEGER { isYear(getCurrentToken().getText())}? y=INTEGER
{//handle date, use $y for year}
| month d=INTEGER {//handle date, use 2013 for year}
;
파서가 하나의 샘플 입력에서 실행, 나는이 메시지를 얻을 : 그것은, 두 번째 규칙 대안에 도달하지 않기 때문에 결코
line 1:9 rule date failed predicate: { isYear(getCurrentToken().getText())}?
를 (I ' 추측) 그것은 이미 하나의 여분의 토큰을 읽었습니다.
누군가이 작업을 수행하는 방법을 보여 줄 수 있습니까?
하나의 솔루션은 두 개의 파서를 사용하는 것이고, 첫 번째는 술어없이 위와 같습니다. 첫 번째 입력에는 "$ DATE (2012-1-19) 9pm"을, 두 번째 입력에는 "$ DATE (2013-1-19), 7-9pm"을 출력합니다. 그러나 이와 같은 다른 모호성이 발생하면 이는 n 파서 솔루션이됩니다. –