Introdução
Olá a todos, sou o autor da linguagem de programação Relax. Atualmente estou desenvolvendo RVM (RelaxVirtualMachine) E Relasm (Relax Assembly). As primeiras tentativas de fazer minha própria linguagem começaram no final do verão de 2020, então eu nem pensei no que fazer uma linguagem - é tão difícil. O próprio projeto Relax começou em 30 de dezembro de 2020. Um mês e meio se passou e você já pode escrever algo simples nele.
Como faço para compilar o código?
, 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 .
Relaxar é só um mês e meio, mas ele já consegue fazer isso. Vai se desenvolver por muito tempo. Mas mesmo agora é possível escrever programas de console simples.
Repositório de máquina virtual (a documentação do relasm está lá) - https://github.com/UnbelievableDevelopmentCompany/RVM
Repositório do compilador Relasm - https://github.com/UnbelievableDevelopmentCompany/Relasm
Pacote para texto sublime 3 - RelasmST3Package