# 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 í¨í¤ì§ ì¬ì©