Skip to content

mingjuu/TinyPythonToJavaBytecode

Repository files navigation

TinyPython to JVM Bytecode Compiler

📌 과제 개요

이 프로젝트는 TinyPython 코드를 Jasmin 문법의 Java Bytecode로 변환하는 컴파일러를, 과제 요구사항에 맞춰 구현한 프로젝트입니다.

🎯 과제 목표

  • TinyPython으로 작성된 프로그램(.tpy)을 Java Bytecode (.j 파일)로 변환하는 컴파일러 제작
  • 생성된 .j 파일은 Jasmin을 사용해 .class 파일로 변환
  • 변환된 프로그램은 java 명령어로 실행 가능해야 함

📂 구현 파일 설명

📁 src 디렉토리 구성

파일명 설명
Main.java 프로젝트의 진입점으로, ANTLR 파서를 초기화하고 TinyPython 코드를 Java Bytecode로 변환하는 전반적인 실행 흐름을 담당합니다.
tinyPythonBaseListener.java ANTLR이 자동 생성한 베이스 리스너 클래스입니다. 커스텀 리스너에서 필요한 메서드만 오버라이드하여 사용할 수 있도록 도와줍니다.
tinyPythonLexer.java TinyPython 문법에 기반한 렉서(Lexer)로, 소스 코드를 토큰 단위로 분리합니다. ANTLR에 의해 자동 생성됩니다.
tinyPythonListener.java 구문 트리를 탐색하며 동작하는 리스너 인터페이스입니다. 사용자가 직접 구현한 리스너 클래스에서 이 인터페이스를 구현하여 로직을 작성합니다.
tinyPythonParser.java TinyPython 문법을 바탕으로 생성된 파서(Parser) 클래스입니다. ANTLR이 자동 생성하며 문법 분석 기능을 제공합니다.
tinyPythonToJasmin.java 핵심 변환 로직을 담당하는 클래스입니다. 리스너를 구현하여 TinyPython 구문을 Jasmin(Java Bytecode)으로 변환합니다.

위의 클래스들 중 Lexer, Parser, BaseListener, Listener는 ANTLR을 통해 .g4 파일로부터 자동 생성된 파일입니다.



📐 문법 및 제약 조건

변경된 문법 사항

  • 함수 정의 이후 main 문이 시작되도록 구조 변경
  • defs 라는 non-terminal 키워드 추가
  • 비교 연산 표현식 단순화: expr (comp_op expr)* → expr comp_op expr

컴파일 시 제약 조건

  1. 클래스는 기본적으로 존재한다고 가정
  2. 모든 함수는 static 메서드로 작성
  3. 함수 정의는 파일 상단에 위치하고, 이후 main 함수가 위치
  4. 함수 안에 함수가 존재하지 않음 (nesting 금지)
  5. 반드시 main 함수 존재
  6. 모든 인자 및 리턴 타입은 int로 제한
  7. 연산자(사칙/비교)도 int만 처리 가능
  8. Print는 문자열, 숫자 출력만 가능하고 내부 연산은 불가능

🚫 고려하지 않아도 되는 기능

  • 배열
  • 예외 처리
  • 라이브러리 사용 (Python/Java)
  • 비정상 입력
  • Python 패키지/Java 패키지 사용

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published