C언어 토큰 분리법에 대해서 질문이~
글쓴이: feelsocrazy / 작성시간: 일, 2008/04/06 - 2:23오후
[token] [token] [token [token] token]
이 것을
1. token
2. token
3. token token token
이렇게 구분하고 싶은대요...
strtok로 쓰니깐
1. token
2. token
3. token
4. token
5. token
이렇게 되어버리내요....
3개로 구분하는 방법이 없을까요??
Forums:


파서를
파서를 공부해보세요.
언제나 삽질 - http://tisphie.net/typo/
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
저런 걸 파싱하려면
저런 걸 파싱하려면 context free parser가 필요한가요?
요구사항으로 봐서는
요구사항으로 봐서는 단순한 토큰 파싱이 아닌 '[', ']' 로 depth 구별을
해야 할 것 같네요.
간략하게 의미적으로 코딩해 본다면 아래처럼.
depth = 0; brace_open = 0; clear_token_buffer(); while (1) { ch = getc (stdin); if (ch == EOF) break; if (ch == '[') { depth++; if (brace_open > 0) { push_token_buffer(); // token_buffer에 있는 내용을 스택에 넣는다. clear_token_buffer();// token_buffer를 초기화 } brace_open++; } else if (ch == ']' && brace_open > 0) { push_token_buffer(); clear_token_buffer(); depth--; brace_open--; if (depth == 0) pop_all_token(); // 스택에 있는 모든 token을 꺼낸다. } else if (brace_open > 0 && isprint(ch)) { addto_token_buffer(ch); // token_buffer에 ch 문자 연접 } else { /* handling unexpected input */ } } if (depth != 0 || brace_open != 0) { /* print warning of bad input format */ }(표준입력 가정,
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
regex 강추!!
IsExist님이 말씀하신 것처럼 strtok, strtok_r 등을 이용해섯 코딩상에서 depth 에 대한 처리를 해줄수 있겠고요.
아니면 정규식을 쓰는거죠.
고정된 포맷이면 전자가 좋겠고, 포맷이 자주 바뀐다면 정규식을 이용하시는게 코드수정이 용이합니다.
ps. strtork()는 COW ( copy on write )
Hello World.
댓글 달기