오레올레 언어를 만드는 중
동기
무엇으로 만드는가?
리포지토리
사양 개요(현시점에서 생각하는 것)
사양 상세(정리 중)
진행 상황
구현 상태 보고
컴파일 샘플
그 1
출처
// 関数 日本語使用可能
i32 𩸽(i32 a,i32 b){
return a * b;
};
// メイン
export i32 main(){
i32 b = 0;
for(i32 c = 0;c < 4;++c) {
b = b + 1;
}
return 𩸽(b,b);// 4
};
움직이는 샘플
움직이는 샘플
컴파일 결과
(module
(type $𩸽 (func (param i32 i32) (result i32)))
(type $main (func (result i32)))
(memory $0 1 1)
(export "main" (func $main))
(func $𩸽 (; 0 ;) (type $𩸽) (param $0 i32) (param $1 i32) (result i32)
(return
(i32.mul
(get_local $0)
(get_local $1)
)
)
)
(func $main (; 1 ;) (type $main) (result i32)
(local $0 i32)
(local $1 i32)
(set_local $0
(i32.const 0)
)
(block
(block $for0
(set_local $1
(i32.const 0)
)
(loop $loop1
(br_if $for0
(i32.eqz
(i32.lt_s
(get_local $1)
(i32.const 4)
)
)
)
(block
(set_local $0
(i32.add
(get_local $0)
(i32.const 1)
)
)
)
(set_local $1
(i32.add
(get_local $1)
(i32.const 1)
)
)
(br $loop1)
)
)
)
(return
(call $𩸽
(get_local $0)
(get_local $0)
)
)
)
)
그 2:유저 정의형(커스텀형)
출처
type Bar {
public:
i32 barA = 3;
i32 barB = 4;
};
type Foo {
public:
i32 a = 1;
i32 b = 2;
Bar c;
};
export i32 main(){
Foo foo,foo1;
foo.a = 2;
foo1 = foo;
foo.a = 10;
return foo.a * foo1.a;
};
움직이는 샘플(컴파일 결과)
움직이는 샘플(컴파일 결과)
그 3:포인터
소스 코드
export i32 main(){
i32 p = 0;// メモリオフセット0をポインタにセット
*p = 32.0f;// floatの値を保存
u32 a = *p;// float値をu32値として取り出し
return a;
};
움직이는 샘플(컴파일 결과)
움직이는 샘플(컴파일 결과)
그 4:형 별칭
소스 코드
export i32 main(){
// type エイリアス
type& T = i32;
type& T1 = T;
T a = 1;
T1& b = a;
++a;
b += 2;
return a;// 4
};
움직이는 샘플(컴파일 결과)
움직이는 샘플(컴파일 결과)
그 5:const 변수
소스 코드
const WIDTH = 320;
const HEIGHT = 240;
export i32 main(){
i32 a = WIDTH * HEIGHT;
return a;// 76800
};
움직이는 샘플(컴파일 결과)
움직이는 샘플(컴파일 결과)
그 6:reinterpret cast
소스 코드
export f64 main(){
i64 a = 0x3fc4 0000 0000 0000xl;// f64を整数値として代入
f64 b = (^f64)a;// reinterpret cast
return b;// 0.15625
};
움직이는 샘플(컴파일 결과)
움직이는 샘플(컴파일 결과)
그 7:캐스트
소스 코드
// キャストの実装(ネイティブ型同士のみ)
export i32 main(){
i32 b = 10;
f64 c = (f64)b + 10.0lf;
return (i32)c;
};
움직이는 샘플(컴파일 결과)
움직이는 샘플(컴파일 결과)
그 8:수치 리터럴
소스 코드
export i32 main(){
i32 a = 0x1 00x;// 16進リテラル(スペースで値が区切れる)
,b = 0b1 0000 0000 b;// 2進数リテラル
if( a == b){
return 1;
}
return 0;
};
움직이는 샘플(컴파일 결과)
움직이는 샘플(컴파일 결과)
Reference
이 문제에 관하여(오레올레 언어를 만드는 중), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SFPGMR/items/97a21a694286a4688d17텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)