C언어 토큰 분리법에 대해서 질문이~

feelsocrazy의 이미지

[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개로 구분하는 방법이 없을까요??

mithrandir의 이미지

파서를 공부해보세요.

언제나 삽질 - http://tisphie.net/typo/

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

gamdora의 이미지

저런 걸 파싱하려면 context free parser가 필요한가요?

IsExist의 이미지

요구사항으로 봐서는 단순한 토큰 파싱이 아닌 '[', ']' 로 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가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

오호라의 이미지

IsExist님이 말씀하신 것처럼 strtok, strtok_r 등을 이용해섯 코딩상에서 depth 에 대한 처리를 해줄수 있겠고요.

아니면 정규식을 쓰는거죠.

고정된 포맷이면 전자가 좋겠고, 포맷이 자주 바뀐다면 정규식을 이용하시는게 코드수정이 용이합니다.

> man regex

ps. strtork()는 COW ( copy on write )

Hello World.