ANTLR 2

ANTLR를 이용한 tinyPython to Jasmin 컴파일러 만들기. - 2

* 본 내용은 충남대학교 조은선 교수님의 컴파일러 개론을 수강하고 작성한 글입니다. 저번 글에서는 전체적으로 Run 버튼을 누르고 나서 어떻게 프로그램이 실행되는지 과정을 살펴보았다. 요약하자면, 프로그램이 실행됨과 동시에 디렉토리 내부의 'Test.tpy'를 찾아와 g4 rule 파일에 정의된 최소 토큰 단위로 문자열을 파싱하는 구조였다. 그래서 우리가 해야할 일은 파싱된 해당 문자열에 도착했을 때 어떤 일을 해줄 것인지를 정의해주는 것이다. 그렇다면 어떻게, 어디서 우리가 해야할 일을 정의할 수 있을까? ANTLR의 기능을 이용하면, 가지고 있는 g4 파일을 기반으로 파싱하기 위한 BaseListener, Visitor, Lexer 등 기본 추상 클래스를 자동 생성이 가능하다. 가지고 있는 g4 파일..

ANTLR를 이용한 tinyPython to Jasmin 컴파일러 만들기. - 1

* 본 내용은 충남대학교 조은선 교수님의 컴파일러 개론을 수강하고 작성한 글입니다. 이번 학기에 텀프로젝트로 수행한 tinyPython to Jasmin 컴파일러가 나름 재미있게 만든 경험이라고 생각해 정리해보기로 했다. 우선, 전체적인 텀프로젝트 수행 제약 조건은 다음과 같다. 1. Class 정의는 기본적으로 전재한다고 가정 2. 모든 함수는 static 메소드로 가정 3. 함수 정의는 맨 위에서 순서대로 나타남. 그 아래에 main 함수에 해당하는 구문들이 작성 됨 4. 함수 안의 함수 등의 nesting은 없다고 가정. 5. Java Bytecode로 변환 시 Main 함수는 반드시 존재. 생성해줘야함 6. 함수의 인자와 리턴 타입은 int 타입만 7. 사칙 연산 비교 연산은 int만 허용 또한 ..