Shinnara's Blog
Talking with Shinnara :: NaraTalk.com

'yacc'에 해당되는 글 2건

  1. 2009/01/09 ANSI C 를 파싱하기 위한 Lex/Yacc 파일
  2. 2008/11/24 Perl을 이용한 C 소스 코드 분석 (3) (2)

 요즘 계속해서 C 코드 파싱 문제를 다루고 있는데요, 그다지 큰 진척이 없다가 정통(?) 방식을 따르기로 마음먹고 Lex와 Yacc에 대한 공부를 해보았습니다. 뭐, 아직까지 제대로 알고 있지는 못하구요, 대강 어떻게 돌아가는 지, 문제가 생기면 어디쯤을 고쳐야 하는지에 대한 대략적인 감만 얻었다고나 할까요? 그래도 작업은 꽤 많이 진척되어서 C 코드에서 원하는 정보를 99% 얻어내고 있답니다. 이와 관련된 내용은 시간을 내어 정리하도록 하고, 오늘은 그 작업에 무지 무지 큰 도움이 된 정보를 소개하고자 합니다.

Lex 와 Yacc을 이용하기 위해서는 Lexical Specification 과 Grammar가 필요한 데요, 다음 링크에서 얻을 수 있습니다.

Lexical Specification
Yacc Grammar

꽤나 잘 정리가 되어 있습니다. 물론 곧바로 쓰기에는 약간 무리가 있는 부분도 있지만, 제가 원하던 작업에는 쉽게 적용이 가능했습니다.

C의 문법을 보면서 ANSI C의 표준에 대해 궁금해서 찾아봤는데, 좋은 자료가 있더군요.

Draft of the C99 standard (PDF)




0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/280 관련글 쓰기

댓글을 달아 주세요


다들 월요일을 잘 시작하셨는지요? 저는 주말을 너무도 재밌게 보내고나서인지 오늘 하루는 조금 피곤했네요. 모든 가족들이 잠든 조용한 밤에 몇글자 끄적여볼까 합니다.

본론부터 이야기하자면, 오늘 오후를 기점으로 소스 코드 분석을 위해 Perl을 이용하려던 계획은 잠정 보류하기로 하였습니다. 이전의 두개의 포스팅을 통해 Function과 Literal을 분리해내는 Perl 코드를 작성했다고 말씀드렸는데요, 이제 글로벌 변수에 대한 추출을 하려고 하니, 이게 막막하더군요.  처음의 생각은 이러했습니다.

  1. 전체 변수를 추출
  2. 로컬 변수를 제거 : 모듈 내의 선언문을 통해 알 수 있겠죠?
  3. 대입문이 있는 경우 왼쪽에 쓰이면 Output [각주:1], 오른쪽에 쓰이면 Input. 대입문이 아니면 Input

위와 같은 단계를 거쳐 추출을 해내려고 했습니다. 그런데 위와 같은 방법으로 만들어내는 변수의 목록은 그 정확성을 100% 장담하기 어렵다는 것이지요. 즉, 뭔가 찜찜한 구석이 남게 되는 문제가 생깁니다. 그래서 생각한 것이 Syntax 에 따라 파싱을 하게되면 정확히 Input/Output을 가릴 수 있지 않을까 하는 것입니다. 그러기 위해서는 제대로된 파싱을 할 필요가 있겠지요.

그래서 일단 "Perl을 이용한 C 소스 코드 분석"은 잠시 보류하려고 합니다. 오늘 오후부터 Lex & Yacc 에 대해 살펴보고 있는 중이랍니다. 며칠 동안 서베이와 테스트 코드를 돌려보고 진행 여부를 결정해볼까 합니다.

생각보다 작업이 어려워지네요..^^

모두 즐거운 밤 되세요.

  1. 팀의 코딩 및 주석 규칙에 외부의 변수를 단순 참조할 경우 Input, 해당 값이 모듈 내에서 변경될 경우 Output으로 정하고 있습니다. [본문으로]
0 Trackback, 2 Comment

TRACKBACK :: http://naratalk.com/trackback/267 관련글 쓰기

댓글을 달아 주세요

  1. Favicon of http://aero.dnip.net/blog BlogIcon aero  댓글주소  수정/삭제  댓글쓰기

    Perl에서도 고급기능을 가진 Parser들이 많습니다.
    Parse::RecDescent 와 Parse::Yapp 모듈등...
    http://search.cpan.org/dist/Parse-RecDescent/ 을 보시면
    http://search.cpan.org/perldoc?csourceparser.pl 처럼 Parse::RecDescent 모듈로 C소스 파싱하는 샘플이 이미 있네요..

    2008/11/25 13:18
  2. Favicon of http://naratalk.com BlogIcon Shinnara  댓글주소  수정/삭제  댓글쓰기

    오호~ 고맙습니다. 아직 Perl을 접한지 얼마 안되다보니 부족한게 많네요~ ^^

    2008/11/25 23:21

1 
다...... (264)
Computer/Programming (106)
Links (14)
책 읽는 즐거움 (7)
끄적임 (66)
즐거운 과학 나라 (7)
일본 (5)
Study (4)