Toy-C — シンプルなC風コンパイラ

Tool

概要

Toy-Cは、Cに似たごく簡単な言語を受け取りx86-64用のNASMアセンブリを生成する「簡易コンパイラ」です。サポートされる機能は限定的で、64ビット整数型のみ、変数宣言、加算・減算、return、単一のmain関数のみといった制約があります。全変数をスタックに配置するスタックベース設計により実装が単純化され、字句解析からコード生成までの流れを学ぶ教材や実験用プロジェクトとして有用です。

GitHub

リポジトリの統計情報

  • スター数: 1
  • フォーク数: 0
  • ウォッチャー数: 1
  • コミット数: 2
  • ファイル数: 2
  • メインの言語: C

主な特徴

  • 64ビット整数(int)のみを扱うシンプルな言語仕様
  • 変数はすべてスタック上に配置するスタックベース実装
  • 式の演算は加算(+)と減算(-)に限定
  • x86-64 NASMアセンブリを出力し、実行可能コードに結びつけられる

技術的なポイント

Toy-Cは学習向けに意図的に機能を絞り、コンパイラの基本要素を追体験できるように設計されています。字句解析では入力ソースをトークンに分解し、簡易な構文解析器(おそらく再帰下降型)で文や式を解析します。型システムは存在せず、すべてを64ビット整数として扱うため型チェックは単純です。ローカル変数は全てスタックに割り当てられ、変数位置はコンパイル時にスタックオフセットとして決定されます。コード生成フェーズでは、算術演算をシンプルな命令列(add/sub)に展開し、関数のプロローグ/エピローグを生成して呼び出し規約に従い戻り値をRAXに格納します。出力はNASM形式のアセンブリで、ユーザーはそのままアセンブルしてリンクすることで実行バイナリを得られます。制約の多さ(単一関数、演算子の限定)は実装を明快にし、変数スコープやスタック管理、簡易的なシンボルテーブルといったコンパイラ設計の重要領域に集中した学習を可能にします。拡張余地としては、複数関数対応、スタック外のメモリ管理、追加演算子や制御構造の導入、レジスタ割り当ての改善などが挙げられ、教育用演習として改造や性能改善の題材になります。

プロジェクトの構成

主要なファイルとディレクトリ:

  • README.md: file
  • Simple Compiler: dir

まとめ

教育用途に最適な、小さく読みやすいコンパイラ実装です(学習用・実験用におすすめ)。

リポジトリ情報:

READMEの抜粋:

Simple C Compiler

A basic C compiler that generates x86-64 NASM assembly.

What It Is

A toy compiler for a C-like language. Not real C - just looks like it.

What works:

  • Variables: int x = 5;
  • Math: x + y, x - y
  • Return: return x;

Differences from real C:

This Compiler
Stack-based (all vars on stack)
One function only (main)
Only int (64-bit)
Only + and -

Type of Language:

  • Imperative - Commands executed se…