2013-12-20 3 views
0

(nodeHead: nodeBody) 구문을 사용하는 DSL 용 파서를 작성하고 있습니다. 문제는 nodeBody에 괄호가 포함될 수 있다는 것입니다. 는 JParsec의 between 운영자는 좋은 해결책이 있었어야했는데, 아직 다음 코드는 실패JParsec를 사용하여 괄호 안에 텍스트 구문 분석

public void testSample() { 
    Parser<Pair<String,String>> sut = Parsers.tuple(Scanners.IDENTIFIER.followedBy(Scanners.among(":")), 
      Scanners.ANY_CHAR.many().source() 
      ).between(Scanners.among("("), Scanners.among(")")); 
    sut.parse("(hello:world)"); 
} 

그것은 내가 ANY_CHARIDENTIFIER을 변경할 때 실패하지 않습니다, 그래서 여기에 문제가 가정 그 두 번째 파서 튜플은 너무 탐욕 스럽다. 또는 JParsec이 본문을 적용하기 전에 파서간에 적용 할 수 있습니까?

모든 아이디어가 매우 유용합니다. 구문 규칙은 마지막 문자는 항상 ")"이 될 것입니다 경우

답변

0

내가 요구 한 당시 보인다. 그러나 github fork-and-pull 나중에 있습니다 : reluctantBetween().

빠른 응답으로 @abailly에게 큰 감사드립니다.

-1

, 아마 당신은 할 수 : 그렇게 할 수있는 방법이 없었다처럼

static <T> Parser<T> reluctantBetween(
    Parser<?> begin, Parser<T> parser, Parser<?> end) { 
    Parser<?> terminator = end.followedBy(eof()); 
    return between(begin, terminator.not().next(parser).many(), terminator); 
} 
+0

질문에 대답하지 말고 대답으로 남겨주세요. – rorypicko

+0

규칙은 마지막 문자가 ")"이어야한다는 것입니다. 감사. –

+0

코드 스 니펫으로 답변을 업데이트했습니다. 나는 그것을 검증하지 않았지만 그것은 생각이다. –