2017-03-15 12 views
1

Antlr3을 사용하고 있습니다.antlr3의 숨겨진 토큰 관리

print a; 




print b; 

이 모든 줄 바꿈 (\ n을)를 무시합니다 숨겨진 channel.So 파서 나는 줄 바꿈 (\ n을)를 유지 렉서의 parser.And에 (DB에 저장) 내 입력 파일입니다 후론 나는 그것이

print a; 
print b; 

처럼 누락 나의 새로운 라인 (\ n을)를 변경합니다 (DB에서) 입력 파일을 가져올 때 그것을 실행! ... 나는이 줄 바꿈을 검색 할 수있는 방법 (\ n)도

답변

1

토큰 스트림에는 여전히 모든 것이 있습니다. 모든 토큰을 반복하기 만하면 루프에 개행 문자가 표시됩니다. 각 토큰에는 토큰 스트림의 색인 인 토큰 색인이 있습니다. 따라서 갭을 포함하는 인덱스가있는 2 개의 일반 토큰을 볼 때 숨겨진 토큰이 있으며 토큰 스트림을 통해 해당 토큰을 검색 할 수 있다는 것을 알고 있습니다.

+0

감사합니다 ...하지만 어떻게 내가이 숨겨진 토큰을 검색 할 수 있습니까? 사실 "CommonTokenStream tokenStream = new CommonTokenStream (렉서);" 나는 숨겨진 토큰을 얻지 못할거야! 맞지? – JESSY

+0

아니, 그냥 토큰 스트림을 만듭니다. 그러나 이제는'tokenStream.fill();'과'tokenStream.getTokens(); '를 호출하면 모든 토큰이 반환됩니다. –

+0

트리 (파서가 생성)를 기반으로 스크립트를 다시 생성했습니다. 숨겨진 토큰을 수집 할 수 있습니다. 그러나 스크립트를 다시 생성하는 동안 트리 노드가 숨겨진 토큰을 추가해야합니까? 어떻게 트리 노드와 숨겨진 토큰을 관련시킬 수 있습니까? – JESSY