Skip to content

kawawa1989/ScriptEngine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 

Repository files navigation

ScriptEngine

Studying Script language. This language is not support GC...

ForExample)

/*
 * FizzBuzzを出力する
 * 3と5で割り切れる値のとき ... FizzBuzz
 * 3で割り切れる値 ... Fizz
 * 5で割り切れる値 ... Buzz
 * それ以外 ... 数字を出力
 */
function main(){
	for( $i = 1 ; $i <= 100 ; $i += 1 ){
		$s = "";
		if( $i % 3 == 0 ) $s += "Fizz";
		if( $i % 5 == 0 ) $s += "Buzz";
		if( IsEmpty( $s ) ) $s = ToString( $i );
		Log( $s );
	}
}

If you use a array, it can description it as follows.

/*
 * エラトステネスの篩
 * 素数を求めるアルゴリズム
 */
function main(){
	$buf as array[5000];
	for( $i = 2 ; $i < 100 ; $i+=1 ){
		if( $buf[$i] ){
			continue;
		}
		for( $j = 2 ; $j < 50 ; $j += 1 ){
			if( $i * $j > 100 ){
				break;
			}
			$buf[$i * $j] = 1;
		}
		Log( ToString( $i ) );
	}
}

If you use a struct, it can description it as following.

/*
 * How to decl struct
 * if you access to field, it need to use `$this`
 * $this.member
 */
struct Vector2 {
	$x;
	$y;
	
	function Func(){
		return $this.x * $this.x;
	}
  
	function Func2(){
		return $this.Func() * 3;
	}
}

function main(){
	$vect as Vector2; // $var as StructType
	$vAry as Vector2[10]; // if you use a array
	$vect.x = 100;
	$vect.y = 200;
	Log("x:" + ToString($vect.x));
	Log("y:" + ToString($vect.y));
	Log("func:" + ToString($vect.Func()));
	Log("func:" + ToString($vect.Func2()));
	$vAry[0].x = 230;
	$vAry[0].y = 250;
	$vAry[1].x = 330;
	$vAry[1].y = 350;
	$vAry[2].x = 430;
	$vAry[2].y = 450;
  
	for( $i = 0 ; $i < 10 ; $i+=1 ) {
		Log("index:" + ToString($i) + "x:" + ToString($vAry[$i].x) + ",y:" + ToString($vAry[$i].y));
	}
}

This engine can generate assemble code log, it feels like as follows.

func main
stack frame 23
00000000:       mov R0 , 100
00000012:       mov L[0][0] , R0
00000032:       mov R0 , L[0][0]
00000052:       mov R0 , 200
00000064:       mov L[0][1] , R0
00000084:       mov R0 , L[0][1]
00000104:       mov R0 , x:
00000111:       mov R1 , L[0][0]
00000131:      push R1
00000134:        st 1
00000136:      call 1(built in function)
00000141:       mov R1 , R0
00000146:        ld 1
00000148:       add R0 , R1
00000153:      push R0
00000156:        st 0
00000158:      call 0(built in function)
00000163:       mov R0 , R0
00000168:        ld 0
00000170:       mov R0 , y:
00000177:       mov R1 , L[0][1]
00000197:      push R1
00000200:        st 1
00000202:      call 1(built in function)
00000207:       mov R1 , R0
00000212:        ld 1
00000214:       add R0 , R1
00000219:      push R0
00000222:        st 0
00000224:      call 0(built in function)
00000229:       mov R0 , R0
00000234:        ld 0
00000236:       mov R0 , func:
00000246:   mov ptr R1 , L[0]
00000260:  push ptr R1
00000263:        st 1
00000265:      call 0
00000270:       mov R1 , R0
00000275:        ld 1
00000277:      push R1
00000280:        st 1
00000282:      call 1(built in function)
00000287:       mov R1 , R0
00000292:        ld 1
00000294:       add R0 , R1
00000299:      push R0
00000302:        st 0
00000304:      call 0(built in function)
00000309:       mov R0 , R0
00000314:        ld 0
00000316:       mov R0 , func:
00000326:   mov ptr R1 , L[0]
00000340:  push ptr R1
00000343:        st 1
00000345:      call 1
00000350:       mov R1 , R0
00000355:        ld 1
00000357:      push R1
00000360:        st 1
00000362:      call 1(built in function)
00000367:       mov R1 , R0
00000372:        ld 1
00000374:       add R0 , R1
00000379:      push R0
00000382:        st 0
00000384:      call 0(built in function)
00000389:       mov R0 , R0
00000394:        ld 0
00000396:       mov R0 , 0
00000408:       mov R1 , 230
00000420:       mov L[2+(2*R0)][0] , R1
00000448:       mov R0 , L[2+(2*R0)][0]
00000476:       mov R0 , 0
00000488:       mov R1 , 250
00000500:       mov L[2+(2*R0)][1] , R1
00000528:       mov R0 , L[2+(2*R0)][1]
00000556:       mov R0 , 1
00000568:       mov R1 , 330
00000580:       mov L[2+(2*R0)][0] , R1
00000608:       mov R0 , L[2+(2*R0)][0]
00000636:       mov R0 , 1
00000648:       mov R1 , 350
00000660:       mov L[2+(2*R0)][1] , R1
00000688:       mov R0 , L[2+(2*R0)][1]
00000716:       mov R0 , 2
00000728:       mov R1 , 430
00000740:       mov L[2+(2*R0)][0] , R1
00000768:       mov R0 , L[2+(2*R0)][0]
00000796:       mov R0 , 2
00000808:       mov R1 , 450
00000820:       mov L[2+(2*R0)][1] , R1
00000848:       mov R0 , L[2+(2*R0)][1]
00000876:       mov R0 , 0
00000888:       mov L[22] , R0
00000902:       mov R0 , L[22]
00000916:       mov R0 , L[22]
00000930:       mov R1 , 10
00000942:         l R0 , R1
00000947:        jz [00001214]
00000952:       mov R0 , index:
00000963:       mov R1 , L[22]
00000977:      push R1
00000980:        st 1
00000982:      call 1(built in function)
00000987:       mov R1 , R0
00000992:        ld 1
00000994:       add R0 , R1
00000999:       mov R1 , x:
00001006:       add R0 , R1
00001011:       mov R1 , L[22]
00001025:       mov R1 , L[2+(2*R1)][0]
00001053:      push R1
00001056:        st 1
00001058:      call 1(built in function)
00001063:       mov R1 , R0
00001068:        ld 1
00001070:       add R0 , R1
00001075:       mov R1 , ,y:
00001083:       add R0 , R1
00001088:       mov R1 , L[22]
00001102:       mov R1 , L[2+(2*R1)][1]
00001130:      push R1
00001133:        st 1
00001135:      call 1(built in function)
00001140:       mov R1 , R0
00001145:        ld 1
00001147:       add R0 , R1
00001152:      push R0
00001155:        st 0
00001157:      call 0(built in function)
00001162:       mov R0 , R0
00001167:        ld 0
00001169:       mov R0 , 1
00001181:       add L[22] , R0
00001195:       mov R0 , L[22]
00001209:       jmp [00000916]
00001214:       end

About

自作のスクリプト

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages