2012-12-12 8 views
0

Cag에서 문자열을 파싱하려면 Ragel을 사용하고 있습니다. 내가 무한한 시간 동안 파싱을 일시 중지하고 나서 중단했던 곳에서 파싱을 재개 할 수 있어야한다.Ragel에서 파싱 일시 중지 및 다시 시작

지금은 마무리 작업이 끝나면 fbreak을 넣으려고합니다. 이것은 정상적으로 작동하여 부모 프로그램으로 제어권을 반환합니다. 그러나 구문 분석을 다시 시작하는 방법을 모르겠습니다. %write exec에 의해 생성 된 코드를 호출하는 것만으로 충분할 것이라고 생각했지만,이 경우는 아닌 것 같습니다. 구문 분석으로 돌아 가면 원래 문자열에 대한 참조가 잘못되었거나 손실 된 것 같습니다.

내가 여기 C++에서 뭔가 잘못하고 있는지 (내 모국어가 아님) 또는 Ragel에 잘못된 접근 방법을 사용하고 있는지 확실하지 않습니다.

여기 내 시작의 코드 재개 :

const char *p; 
const char *pe; 

void start() 
{ 
    int len = theString.length(); 
    char chars[len+1]; 
    theString.toCharArray(chars, len+1); 
    p = chars; 
    pe = chars + len; 
    resume(); 
} 

void resume() { 
    %% write exec; 
} 

내가 start() 전화를 처음으로, 내 상태 기 결국 fbreak 아웃 (S)를하고 난 (희망) 구문 분석을 계속 resume()를 호출합니다.

내가 잘못하고있는 부분에 대한 설명이 있으십니까?

답변

0

마치 매달려있는 포인터 문제처럼 보입니다. theString의 초기화를 다른 곳으로 이동하면 문제가 해결 된 것 같습니다. 그래서 기본적으로 나는 여전히 C를 빨고있다.

관련 문제