2014-04-15 5 views
0

JParsec3을 사용하여 DSL을 만들고 있습니다. 구문 분석/연결은 두 단계로 수행됩니다JParsec (3)에서 일치하는 입력 위치를 얻으려면 어떻게해야합니까?

  1. 중간 객체로
  2. 링크 언어를 구문 분석하고 실행 가능한 개체로 개체를 변환

1 단계에서 생성 된 객체가 다른 객체를 참조 할 수 있습니다 아직 파싱되지 않았으므로 2 패스가됩니다. 이제 연결 오류 메시지의 경우 파일에 존재하지 않는 항목을 참조하는 위치로 사용자를 보내야합니다. 이를 위해 중간 객체에 위치를 첨부해야합니다.

어떻게하면됩니까?

감사합니다.

답변

0

이 문제와 관련하여 몇 가지 홍보 및 문제가있어 매우 인기가있는 주제 인 것으로 보입니다. 최신 버전은 https://github.com/abailly/jparsec/pull/16으로 2.1을 릴리스했습니다 (중앙에서 사용 가능). 구상 된 다양한 해결책이있는 오랜 토론 (https://github.com/abailly/jparsec/issues/5)이 있었지만 우리는 Locatable 기능 (아직?)을 포함시키지 않기로 결정했습니다.

기본적으로 2.1에서 시작하여 withSource() 연결자 또는 스트림의 구문 분석 된 위치를 반환하는 "구식"INDEX 파서를 사용할 수 있습니다. 다음은 @fluentfuture의 제안입니다.

Mapper.curry(LocationAnnotated.class).sequence(Parsers.INDEX, parser, Parsers.INDEX); 

public class LocationAnnotated<T> { 
    public LocationAnnotated(int begin, T value, int end) {...} 
}