본문 바로가기

컴퓨터 공학 자료(학부)/Mini C compiler

C 컴파일러 구현 최종 프로젝트로 컴파일러 프로젝트를 해야한다. 가장 친숙한 c를 선택해서(사실 c++의 상속, 다형성을 구현할 자신이 없어서;) ANSI 에서 조금 더 간략화한 small C를 target language로 선택하였다. 생성된 프로그램 source를 컴파일 할 수 있는 컴파일러를 설계하고 구현하는 것이 목표이다. 기존의 Compiler들과 마찬가지로 Text 형태의 source code를 받아들여 오류를 찾고, 오류가 없다면 중간 code를 생성하여 code 최적화를 수행한 후 목적 code를 생성하고 실제 실행이 가능한 실행 파일까지 만드는 것이 구현 최종 목표이다. 컴파일러를 설계하고 구현하기 위해서는 실제 코딩보다 Yacc를 통한 문법 정의 및 실제 심볼 테이블 설계, 컴파일 프로세스 정의 등 설계.. 더보기
shift/reduce conflict , reduce/reduce conflict의 정의 yacc나 bison에 -v 옵션을 붙여서 컴파일 하면 output 파일이 나오는데, 이를 열어보면 yacc 코드의 어느부분이 conflict를 발생시키는 지 알 수 있다. name.output 의 예 : State 93 conflicts: 1 reduce/reduce State 94 conflicts: 4 shift/reduce State 134 conflicts: 1 shift/reduce 현재 총 6개의 충돌이 있고, state 134에 어떤 충돌이 있는지 따라가보니 state 134 31 SelectionStmt: IF '(' Expr ')' IFDE Stmt . 33 | IF '(' Expr ')' IFDE Stmt . ELSE $@2 Stmt ELSE shift, and go to state .. 더보기
윈도 환경 세팅(bison, flex, gcc) 당연히 리눅스환경에서 해야할 줄 알았는데 물어보니 윈도우용 flex, bison도 있었다 gcc는 당연히 있고. 밑에 링크에서 다운받아서 설치하고, 환경변수 설정해주면 쾌적?한 환경에서 컴파일러를 만들 수 있다. 윈도우용 Bison을 다음 링크로부터 다운로드 받아 설치한다. http://gnuwin32.sourceforge.net/packages/bison.htm 윈도우용 Flex를 다음 링크로부터 다운로드 받아 설치한다. http://gnuwin32.sourceforge.net/packages/flex.htm 윈도우용 GCC를 다음 포스트를 참조하여 설치한다. http://devday.tistory.com/entry/윈도우용-GCC-MinGW-사용기 Bison 예제는 다음으로부터 다운로드 받거나 다음 .. 더보기