• LF몰 이벤트
  • 파일시티 이벤트
  • 캠퍼스북
  • 서울좀비 이벤트
  • 탑툰 이벤트
  • 닥터피엘 이벤트
  • 아이템베이 이벤트
  • 아이템매니아 이벤트

[컴파일러]A+받은 컴퓨터 컴파일러 프로젝트 프로그램

*종*
최초 등록일
2005.12.27
최종 저작일
2005.12
3페이지/파일확장자 압축파일
가격 15,000원 할인쿠폰받기
다운로드
장바구니

소개글

컴파일러 수업시간에 구현했던 프로그램입니다.
실제로 잘 구동되구요~ 성적도 좋았던 프로그램입니다.
소스뿐만 아니라 컴파일 되어 있는 상태 그대로 압축해서 올렸습니다.

개발은 Visual C++을 사용했습니다.

자세한 요구사항과 설명은 내부의 문서를 참고하세요.
-----------------------------------------------------------------
이 프로젝트는 scanner와 parser를 구현하는 프로그램.
Scanner는 lexical analysis를 담당하는 부분으로 Finite State Automata를 만든 후 구현하며, syntax analysis를 담당하는 parser의 부분은 Push Down Automata의 형태를 취하여 구현하게 됩니다. Parser 구현을 위한 Syntax는 아래에 주어진 문법을 사용하게 되는 데, scanner 에서는 action table을 parser에서는 parsing table을 통한 automata 를 구현하기를 권장합니다. 그러나, 불가피한 경우에 한해 recursive predictive parser로 구현할 수 도 있습니다. 이를 위한 input, output의 형태와 구현을 위한 처리 조건은 아래와 같습니다.

▶ 입력
☆ 표 1에 주어진 문법에 맞게 작성된 program file로 file 이름은 사용자가 다음과 같은 요령으로 입력하기로 한다. 즉 여러분이 만든 compiler를 구동하기 위해서는 CP2005-학번 (예를 들면, CP200123456 testfile) 를 입력하도록 한다.

▶ 출력
☆ 표 2에 주어진 instruction set을 이용한 목적 code file로, file 이름은 입력 file의 이름에 code 라는 extension을 붙인다. 예를 들면, 상기한 입력의 file의 출력 file 이름은 testfile.code 가 된다.
☆ 출력 file은 아래 출력의 예에서 보여주는 바와 같이 표 2 에서의 목적 코드와 사용된 register의 수를 명시해야 합니다.

▶ 처리 조건
☆ 주어진 Grammar는 필요에 따라 변환 할 수 있다. 단 그 내용에 있어서(syntax and semantics) 동등해야 한다.
☆ 목적 code는 표 2 에 주어진 명령어(instruction)들 만을 사용해야 합니다. 부득이한 경우 새로운 명령어를 사용할 때는 documentation에 명확하게 명시해야 합니다.
☆ variable들은 target program 의 첫머리에 그 변수들이 저장될 data section을 설정하고, 각각의 위치를 16진법의 absolute address로 나타냅니다. 즉, 이 address는 0xa000으로부터 시작하되, 모든 integer variable들은 word boundary(multiple of 4)에서 시작하는 것으로 합니다.
☆ 비교값의 결과는 condition code register인 Reg1 에 그리고 return 되는 value 는 return register인 Reg0 에 저장됩니다. 따라서 이 Register들은 다른 용도에 사용되지 않아야 합니다.
☆ Register는 충분히 많다고 가정하나 될 수 있으면 적은 숫자의 register를 사용하도록 하고 사용된 register의 개수를 code의 마지막 줄에 출력하도록 합니다.

컴파일 실행환경

비주얼 C++을 사용해서 컴파일 하면됩니다.
project.c
parser.c
parser.h
로 구성되어 있습니다.
-실행-
CP2005 <sorce file>

결과
sourcefile.str
sourcefile.code
가 생성됩니다.

본문내용

#include <stdio.h>

#define MAXLENGTH 512
#define CHARLENGTH 20
#define STARTADDRESS 0xa000

#define ISOPERATOR 1
#define ISDIVISOR 2
#define ISSEP 3
#define STACKMAX 255
#define VARMAX 50 //the number of variables


#define INT 4
#define CHAR 1

typedef struct
{
char vname[CHARLENGTH];
int address;
}VARIABLES;

typedef struct
{
int regnum;
int value;
}REGISTER;

enum{STATE_START,STATE_DECL,STATE_STAT,STATE_EXPR,STATE_COND,STATE_FINAL}; //States


extern char wordtbl[MAXLENGTH][CHARLENGTH];
extern int numtbl[MAXLENGTH];
extern int wordcnt;
extern int numcnt;

extern char funcname[CHARLENGTH];
extern VARIABLES var[VARMAX];
extern int varcnt;

int Push(char **str);
char* Pop();
void Viewstack();

void Scanner(FILE *src,FILE *des);
int CheckToken(char *str); //Check str is token or not
int ApplyStr(char *str,FILE *fp); //Check str is keyword or number or word, and print to file
void Parser(FILE *src,FILE *des);
void Error(char *str);
void Scantype(char *buffer,REGISTER *reg,FILE *des);
int Stateprocess(FILE *src,FILE *des,int curstate);

압축파일 내 파일목록

Compiler_proj_2005.hwp
parser.c
parser.h
project.c
project.dsp
project.dsw
project.ncb
project.opt
project.plg
testfile
testfile.bak
testfile.code
testfile.str
Debug/CP2005.exe
Debug/parser.obj
Debug/project.ilk
Debug/project.obj
Debug/project.pch
Debug/project.pdb
Debug/testfile
Debug/testfile.code
Debug/testfile.str
Debug/vc60.idb
Debug/vc60.pdb

참고 자료

없음
*종*
판매자 유형Bronze개인

주의사항

저작권 자료의 정보 및 내용의 진실성에 대하여 해피캠퍼스는 보증하지 않으며, 해당 정보 및 게시물 저작권과 기타 법적 책임은 자료 등록자에게 있습니다.
자료 및 게시물 내용의 불법적 이용, 무단 전재∙배포는 금지되어 있습니다.
저작권침해, 명예훼손 등 분쟁 요소 발견 시 고객센터의 저작권침해 신고센터를 이용해 주시기 바랍니다.
환불정책

해피캠퍼스는 구매자와 판매자 모두가 만족하는 서비스가 되도록 노력하고 있으며, 아래의 4가지 자료환불 조건을 꼭 확인해주시기 바랍니다.

파일오류 중복자료 저작권 없음 설명과 실제 내용 불일치
파일의 다운로드가 제대로 되지 않거나 파일형식에 맞는 프로그램으로 정상 작동하지 않는 경우 다른 자료와 70% 이상 내용이 일치하는 경우 (중복임을 확인할 수 있는 근거 필요함) 인터넷의 다른 사이트, 연구기관, 학교, 서적 등의 자료를 도용한 경우 자료의 설명과 실제 자료의 내용이 일치하지 않는 경우
최근 본 자료더보기
탑툰 이벤트
[컴파일러]A+받은 컴퓨터 컴파일러 프로젝트 프로그램
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업