C언어 관련해서 질문드립니다..
글쓴이: xxxvan / 작성시간: 일, 2015/06/28 - 6:28오후
제가 개발하려는게 일종의 interpreter 입니다. 파일을 읽으려니 많은 부분을 생각해야하더군요.
예를 들어 (가 나 다 라) 혹은 (aaa bbb ccc) 이런식의 내용이 있는 파일이 있다고 가정을 하고 이를 읽을때 저는 fscanf 함수를 이용해야겠다 싶었습니다.
그런데 문제는 만약 %s 로 읽었을시 첫 번째 읽기부터 (aaa을 읽어버리니 원하는 aaa값을 읽지 못하더군요. ( "ccc)" 도 마찬가지입니다.)
문제는 이뿐만이 아닌 (가 (나 다) 라) 혹은 (aa (bb cc (ab bc)) dd) 이런 형태의 입력내용도 있다는 것입니다.
입력값의 괄호부분이 상당히 까다롭더군요.. string.h에 포함된 많은 함수를 생각해봤습니다만 잘되지 않더군요..
코드는 바라지않고 저 부분을 어떠한 방식으로 접근해야하나 혹은 표준 library의 어떤 함수를 사용하는게 좋겠다하는 조언하나 부탁드리겠습니다.
감사합니다.
Forums:
Lexical analyzer 추천
그런 기능을 C의 기본 함수만으로 구현하려면 엄청난 삽질을 하셔야 할 것 같습니다.
처음에 배우는 시간을 좀 투자해야 하지만 제대로 된 lexical analyzer (lexer)를 사용하시는 것을 추천해 드립니다. 좀 구닥다리이지만 C에서 쓰려면 flex가 괜찮습니다.
http://flex.sourceforge.net/
제안
1. 저는 JavaScript로 C Compiler를 개발하고 있는데, StringBuffer라는 도구를 만들어봤습니다. C로 보여드릴게요. 이것이 바로 jick님이 말씀하신 삽질이지만요.
2. 컴파일러 공부라면.. 제가 연재중인 글을 참고하셔도 좋을 것 같습니다(당당)
https://kldp.org/node/151702
code.txt
실행 결과
main.c
StringBuffer.h
StringBuffer.c
저는 이렇게 생각했습니다.
C포인터를 활용하면 스트링처리하기 매우편리합니다...
C포인터를 활용하면 스트링처리하기 매우편리합니다... 특별한 함수나 라이브러리의 도움없이도 처리가 가능하죠..
실제로 직접 함수들을 재작하셔도.. 다른언어들의 웬만한 함수기능을 몇줄로도 구현되요..
그런데 님이 만드실 인터프리터는 애초부터 그리간단한 작업이 아니죠.. 구현범위부터 생각해보셔야할듯하네요..
아마 특화된부분에 간단히 처리할거라면
fread, fget 등으로 읽어서.. strtok 등으로 토큰을 분리해내시고..
그렇지 않다면 파싱 함수부분을 직접 구현하시는게 좋을듯하네요..
다들 감사합니다..
사실 이게 한 3년전 자료구조 대학과제라서 복학하기전에 도전하려 했던건데 번번히 실패로 돌아간 관계로 꽤나 애를 먹고 있었습니다.
참고로 구현범위야 그렇게 넓지 않습니다. 위에서 리스트에 해당하는 부분을 reverse flatten append 하는 과정이 포함되어있습니다.
제가 아직 다른 언어는 배우지 못하여서 c로만 구현하는 어려움이 다소 있네요. 조언 감사드리며 다시 한번 도전해보도록 하겠습니다.
"Cogito ergo sum" - René Descartes
댓글 달기