μ΄ νλ‘μ νΈλ TinyPython μ½λλ₯Ό Jasmin λ¬Έλ²μ Java Bytecodeλ‘ λ³ννλ μ»΄νμΌλ¬λ₯Ό, κ³Όμ μꡬμ¬νμ λ§μΆ° ꡬνν νλ‘μ νΈμ
λλ€.
- TinyPythonμΌλ‘ μμ±λ νλ‘κ·Έλ¨(
.tpy)μ Java Bytecode (.jνμΌ)λ‘ λ³ννλ μ»΄νμΌλ¬ μ μ - μμ±λ
.jνμΌμ Jasminμ μ¬μ©ν΄.classνμΌλ‘ λ³ν - λ³νλ νλ‘κ·Έλ¨μ
javaλͺ λ Ήμ΄λ‘ μ€ν κ°λ₯ν΄μΌ ν¨
| νμΌλͺ | μ€λͺ |
|---|---|
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
- ν΄λμ€λ κΈ°λ³Έμ μΌλ‘ μ‘΄μ¬νλ€κ³ κ°μ
- λͺ¨λ ν¨μλ
staticλ©μλλ‘ μμ± - ν¨μ μ μλ νμΌ μλ¨μ μμΉνκ³ , μ΄ν
mainν¨μκ° μμΉ - ν¨μ μμ ν¨μκ° μ‘΄μ¬νμ§ μμ (nesting κΈμ§)
- λ°λμ
mainν¨μ μ‘΄μ¬ - λͺ¨λ μΈμ λ° λ¦¬ν΄ νμ
μ
intλ‘ μ ν - μ°μ°μ(μ¬μΉ/λΉκ΅)λ
intλ§ μ²λ¦¬ κ°λ₯ Printλ λ¬Έμμ΄, μ«μ μΆλ ₯λ§ κ°λ₯νκ³ λ΄λΆ μ°μ°μ λΆκ°λ₯
- λ°°μ΄
- μμΈ μ²λ¦¬
- λΌμ΄λΈλ¬λ¦¬ μ¬μ© (Python/Java)
- λΉμ μ μ λ ₯
- Python ν¨ν€μ§/Java ν¨ν€μ§ μ¬μ©