2011-12-06 4 views
0

나는 다음재사용 ANTLR3 렉서와 파서

pANTLR3_UINT8 input_string = (pANTLR3_UINT8) "test"; 
pANTLR3_INPUT_STREAM stream = antlr3StringStreamNew(input_string, ANTLR3_ENC_8BIT, sizeof(input_string), (pANTLR3_UINT8)"testname"); 

및 문자열을 처리하기 위해 내 렉서와 파서를 사용하여 문자열의 입력 스트림을 작성합니다. 이 문자열을 다 처리했으면 새 문자열을 처리하려고하지만 렉서 및 파서 개체를 다시 만드는 것은 비효율적 인 것처럼 보입니다.

렉서 및 파서 클래스의 reset 메소드와 스트림의 reuse 메소드를 찾았지만이를 사용하여 새 문자열을 구문 분석하는 방법은 무엇입니까?

답변

1

나는 당신이 찾고있는 것이 setCharStream() 기능이라고 믿습니다.

+0

또한 lexer/parser/stream에서 reset을 호출해야합니까? 짧은 예제를 제공해 주시겠습니까? – rickythefox

+0

'reset()'을 수동으로 호출 할 필요는 없습니다. [C 버전] (http://www.antlr.org/depot/antlr3/release-3.1.3/runtime/C/src/antlr3lexer.c)은 대부분의 내부 변수를 리셋합니다 ('setCharStream() 상태를 재설정 언급. ([Java version] (http://www.antlr.org/api/Java/_lexer_8java-source.html#l00123)도'reset()'을 명시 적으로 호출합니다.) 새로운' 새 스트림에 대해 'pANTLR3_INPUT_STREAM'을 실행하고'setCharStream (lexer, new_stream) '으로 재설정하여 이미 완료 한 것처럼 스트림을 생성하십시오. – sarnold