Skip to content

bitter6749/create_lang

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Core 言語仕様書 (v1.5) & 実装ガイド

Coreは、コンピュータの物理的制約を体感するために設計された低級プログラミング言語です。

1. コア・コンセプト

1.1 6レジスタ・アイランド

  • ユーザーが使用できるレジスタは r1r6 の6つのみ。
  • すべての演算はこれらレジスタ間で行う。

1.2 8バイト固定メモリ

  • 変数はすべて 8バイト(64ビット)固定。
  • データの長期保管はメモリで行い、計算時のみレジスタへロードする。

1.3 フラグ・ドリブン分岐

  • 比較演算子 (==, <, >) は存在しない。
  • 演算後のCPUフラグ(ZERO, NEGATIVE, CARRY)を直接 if で判定する。

2. 文法仕様

2.1 変数宣言

  • var @[変数名]; : メモリ上に8バイトの領域を確保。

2.2 データ転送

  • r[n] <- [値] : 即値代入
  • r[n] <- @[変数名] : メモリからロード
  • @[変数名] <- r[n] : メモリへストア

2.3 算術演算

  • r[n] += [値/reg] : 加算 (フラグ更新)
  • r[n] -= [値/reg] : 減算 (フラグ更新)
  • r6 *= r[n] : 乗算。結果は r6 に格納される。
  • r6 /= r[n] : 除算。r6 に商が、r5 に余りが格納される。
    • ※実行前に r5 に入っていた値は破棄されるため注意。

2.4 標準入出力

  • puti r[n] : 数値として出力 (未実装)
  • putc r[n] : ASCII文字として出力
  • geti r[n] : 数値を読み込み (未実装)
  • getc r[n] : 1文字読み込み (EOFでZEROフラグが立つ)

2.5 構造化制御

  • if [FLAG] ... end : 条件分岐
  • loop ... end : 無限ループ
  • break : ループ脱出

3. プログラム例

3.1 十回Aと出力するプログラム

r2 <- 10;

loop
  r1 <- 65;
  putc r1;
  r1 <- 10;
  putc r1;

  r2 -= 1;
  if ZERO
    break;
  end
end

4. コンパイラ実装メモ (x86-64マッピング)

Core x64 特徴 役割 / 注意事項
r1 r12 安全 メイン計算用 (syscall後も値を保持)
r2 r13 安全 メイン計算用 (syscall後も値を保持)
r3 r14 安全 引数・メモリアドレス用
r4 r15 安全 引数・メモリアドレス用
r5 rdx 破壊 将来の除算「余り」用に予約
r6 rax 破壊 将来の除算「商」用に予約

About

プログラミング言語自作に挑戦

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C 95.3%
  • Assembly 3.5%
  • Other 1.2%