2010-06-30 3 views
3

부스트 스피릿 파서에서 C++의 #include 메커니즘을 지원하고 싶습니다. 본질적으로, 나는 파일에서 하위 스크립트를로드하도록 파서에 요청하는 스크립트 명령을 가지고있다. tracking input position while parsing 게시물에 설명 된대로 오류 메시지를보고 할 수는 있지만 여러 입력에 대한 구문 분석은 다루지 않습니다.Boost :: Spirit :: Qi를 사용하여 여러 입력으로 입력 위치를 추적하는 방법은 무엇입니까?

boost::spirit::qi을 사용하여 합리적으로 달성 할 수 있습니까?

더 똑똑한 반복기 유형을 사용하여 다양한 입력을 얻으려고 노력했습니다. 그래도 정확한 위치를보고 싶습니다.

+0

어떤 종류의 동작을 확장 할 수 있습니까? 예를 들어, 재귀 적으로 문법을 적용하여 여러 파일의 입력 위치를 추적 할 수 있지만, 사용자가 찾고있는 것이 아닌 것 같습니다. – academicRobot

+0

@academic : 오류가 발생했을 때 현재 행과 같은 것을 얻을 수 있기를 원합니다. –

+0

모아서 그만;), 분명히 나는 ​​그 질문을 너무 많이 읽었다. – academicRobot

답변

1

IMHO를 사용하면 스마트 반복기를 사용하는 것이 좋습니다. 해야 할 일은 반복자에 의해 입력 컨텍스트 스택이 유지되도록하는 것입니다. 각 입력 컨텍스트는 특정 파일과 관련된 정보를 저장합니다.

새 파일을 읽을 때마다 (즉, #include 문을 본 후) 새 입력 컨텍스트가 만들어집니다. 현재 입력 컨텍스트가 스택으로 푸시되고 새 컨텍스트가 활성 컨텍스트가됩니다. EOF에서는 스택에서 다음 입력 컨텍스트를 팝하고 #include 바로 다음 지점으로 돌아갑니다. 스택이 비어 있으면 주 파일의 EOF에 도달했습니다.

어쨌든 이터레이터는 입력 내용을 활성 입력 컨텍스트에서만 가져옵니다.

+0

그게 내가 현재하고있는거야. 그러나 그렇게하면 정신이 알지 못하며 결과적으로 현재 위치를 추적 할 방법이 없습니다. –

+0

Qi에서 사용할 수 있도록 현재 입력 파일에 현재 파일 이름과 위치를 저장할 수 있다고 생각했습니다. – hkaiser

+0

가능하다면 Spirit의 위치 추적 기능을 사용하고 싶습니다. –

관련 문제