pengantar
Halo semuanya, saya penulis bahasa pemrograman Relax. Saya sedang mengembangkan RVM (RelaxVirtualMachine) DAN Relasm (Relax Assembly). Upaya pertama untuk membuat bahasa saya sendiri dimulai pada akhir musim panas 2020, kemudian saya bahkan tidak berpikir harus membuat bahasa apa - sangat sulit. Proyek Relax sendiri dimulai pada 30 Desember 2020. Satu setengah bulan telah berlalu, dan Anda sudah dapat menulis sesuatu yang sederhana.
Bagaimana cara saya mengkompilasi kode?
, relasm .rasm, - - .ree. 3 : Relasm.exe, RelaxVM.exe, QtCore.dll. : https://github.com/UnbelievableDevelopmentCompany/RVM/tree/master/x64/Release
https://github.com/UnbelievableDevelopmentCompany/Relasm/tree/master/x64/Release
, 3 , PATH( ). cmd Relasm :
Relasm main.rasm program.ree RelaxVM program.ree
relasm -, .
Relasm
Relasm?
mclass MainClass
method public static void MainClass.Main():
.maxstack 1
push.str "hello world"
callm std static Relax.Console.Write(Relax.String)
- hello world! . , Main( ). . - , . , , 1. "hello world" . . , Relasm. .
, hello world, - .
mclass MainClass
method public static void MainClass.Main():
.maxstack 2
;
local firstNum Relax.Int32
local secondNum Relax.Int32
local result Relax.Int32
local op Relax.String
;
callm std static Relax.Console.Read()
callm std static Relax.Converter.StringToInt32(Relax.String)
set firstNum
;
callm std static Relax.Console.Read()
set op
;
callm std static Relax.Console.Read()
callm std static Relax.Converter.StringToInt32(Relax.String)
set secondNum
;
;
get op
push.str "+"
callm std instance Relax.String.operator==(Relax.String)
jmpif opAdd
;
get op
push.str "-"
callm std instance Relax.String.operator==(Relax.String)
jmpif opSub
;
get op
push.str "*"
callm std instance Relax.String.operator==(Relax.String)
jmpif opMul
;
get op
push.str "/"
callm std instance Relax.String.operator==(Relax.String)
jmpif opDiv
opAdd: ;
get firstNum
get secondNum
add
set result
jmp end
opSub: ;
get secondNum
get firstNum
sub
set result
jmp end
opMul: ;
get firstNum
get secondNum
mul
set result
jmp end
opDiv: ;
get secondNum
get firstNum
div
set result
jmp end
end: ;
push.str "\nResult: "
callm std static Relax.Console.Write(Relax.String)
get result
callm std static Relax.Console.Write(Relax.Int32)
. . . . 2 , result end, .
.
mclass MainClass
method public static void MainClass.Main():
.maxstack 2
;
push.int32 10
push.str "Result - "
;
callm usr static MainClass.StringPlusInt32(Relax.String, Relax.Int32)
;
callm std static Relax.Console.Write(Relax.String)
method public static Relax.String MainClass.StringPlusInt32(Relax.String str, Relax.Int32 num):
.maxstack 2
get num
callm std static Relax.Converter.Int32ToString(Relax.Int32) ;
get str
callm std instance Relax.String.Concat(Relax.String) ; str
return ;
StringPlusInt32 , , Relax.Converter.Int32ToString str , . return. Main .
Tenang hanya satu setengah bulan, tapi dia sudah bisa melakukan itu. Ini akan berkembang untuk waktu yang lama. Tetapi bahkan sekarang dimungkinkan untuk menulis program konsol sederhana.
Repositori mesin virtual (dokumentasi relasm ada di sana) - https://github.com/UnbelievableDevelopmentCompany/RVM
Relasm compiler repository - https://github.com/UnbelievableDevelopmentCompany/Relasm
Package untuk teks luhur 3 - RelasmST3Package