はじめに
生成AI(Microsoft CopilotとGitHub Copilot)に日本語プログラミング言語Aoi(あおい)の実装言語仕様を読み込ませて設計タスクから実装を展開しています。本記事ではIRの最小版を実装します。
日本語プログラミング言語 Aoi (あおい) という自作言語の企画趣旨はこちらの記事をご参照ください。開発コード名を「Re:Mind」としており、AIとのやりとりではこの名称が使われています。
生成AI
Microsoft Copilot
Windows11アプリケーションのMicrosoft Copilot。昨年末から日本語プログラミング言語 Aoi(Re:Mind)の原型を作成してもらった生成AI123。モードは「無料プラン」。サインインした状態で使用します。GitHub Copilotの使い方アドバイザーとして利用。
GitHub Copilot
GitHub Copilotのフリー版を導入。こちらの記事でAmazonのkiro-cliのskillsとかなり近いことができることが判明して結果オーライでした。スーパバイザとしてMicrosoft Copilotを使いGitHub CopilotのCodeAgent推論量を最小化するプロンプトをCopilotで生成しGitHub CopilotのCodeAgentで実行という工法?を採用しています。
本記事のステップ
こちらの記事で生成された「Re:Mind コンパイラ全体設計」を細分化したこちらの回の記事の「1. 最小セット(MVP)」の具体的な実装の途中です。今回は「意味解析と名前解決」の最小版を実装します。
1. 最小セット(MVP)
まずは「1つの小さなプログラムを通せる」レベルに絞る構成。
1. Lexer タスク
前々回記事以前で完了
2. Parser タスク
前々回記事以前で完了
3. AST タスク
前々回記事で完了
4. 意味解析と名前解決
前回記事で完了
5. 中間表現(IR) タスク
- AST から後続ターゲットへ落とし込むための IR を追加する。
- IR の設計例は以下の通り。
- ProgramIR: namespace/import/class/method の集合
- ClassIR: field と method の集合
- MethodIR: parameter / local variable / body block
- BlockIR: 文の列
- StatementIR: assignment / call / if / while / for / return / break / continue
- ExpressionIR: identifier / literal / binary / call / member access / array access / new
- AST → IR の変換は「構文情報を保持したまま、バックエンド非依存の形に近づける」設計にする。
- 生成器は IR を受け取って言語別に出力する構造に切り替える。
Microsoft Copilotとの事前準備
プロンプト1
次はMVPを維持しながらIRに進行します。
生成レスポンス1
🧩 タスク 1:IR の枠(骨格)を作る
まずは IR の構造体を空のまま作ります。
これが Phase 5 の最初のステップです。Re:Mind の Phase 5(IR)の開始として、
IR.cs(または IR フォルダ)に以下の IR ノードの「枠(骨格)」だけを新規作成してください。必要な構造:
- ProgramIR
- ClassIR
- MethodIR
- BlockIR
- StatementIR(抽象クラス)
- ExpressionIR(抽象クラス)
中身のロジックは一切書かず、プロパティの枠だけ作成してください。
既存コードは保持し、新規ファイルとして最小構造だけ生成してください。
GitHub Copilot
Microsoft Copilotが生成したGitHub CopilotへのIR.csの枠(骨格)の作成プロンプトを実行した結果、下記のソースコードが生成されました。
using System.Collections.Generic;
namespace ReMindAst
{
public class ProgramIR
{
public List<string> Namespaces { get; } = new();
public List<string> Imports { get; } = new();
public List<ClassIR> Classes { get; } = new();
}
public class ClassIR
{
public string Name { get; set; } = "";
public List<string> Fields { get; } = new();
public List<MethodIR> Methods { get; } = new();
}
public class MethodIR
{
public string Name { get; set; } = "";
public string ReturnType { get; set; } = "void";
public List<string> Parameters { get; } = new();
public List<string> LocalVariables { get; } = new();
public BlockIR Body { get; } = new();
}
public class BlockIR
{
public List<StatementIR> Statements { get; } = new();
}
public abstract class StatementIR
{
}
public abstract class ExpressionIR
{
}
}
本ステップの評価
今回はあまりコメントがついていませんが、かなりよいと評価しています。先を急ぎます。サンプルソースに対してトランスコンパイルが実行できる状況づくりを目指します。
おわりに
以上です。次回の方向性はPhase 5: IRの中身の実装の実行からとなります。
-
Microsoft Copilotで日本語トランスコンパイラ言語 Re:Mindをいじりたおす - Qiita
「Re:Mindをいじりたおす」の記事リストです。(ステップ降順)
ステップ26 ターゲット言語JavaとVB.NETへの展開
ステップ25 ターゲット言語C#へのASTからの生成処理
ステップ24 ASTを生成するサンプル実装をC#で生成
ステップ23 マッピングルール生成
ステップ22 AST(抽象構文木)風の構造化表示
ステップ21 バブルソート 実行可能形式 ターゲットJava C# VB.NET
ステップ20 二分探索法 実行可能形式 ターゲットJava C# VB.NET
ステップ19 線形探索法 実行可能形式 ターゲットJava C# VB.NET
ステップ18 バブルソート 1案件づつやりなおし
ステップ17 二分探索法 1案件づつやりなおし
ステップ16 線形探索法 1案件づつやりなおし
ステップ15 3つの定番アルゴリズムソースの忘却原因調査
ステップ14 バブルソートソースの忘却発生再確認
ステップ13 二分探索法ソースの忘却発生
ステップ12 線形探索法の6言語変換
ステップ11 バージョン情報付きの3定番アルゴリズムソースのフィードバック修正
ステップ10 バージョン情報付きの3定番アルゴリズムソースのフィードバック修正
ステップ9 バージョン情報付きで3定番アルゴリズムソースの生成
ステップ8 バージョニングが可能か確認
ステップ7 Re:Mindの詳しい言語仕様の学習結果をバブルソートで確認
ステップ6 Re:Mindの詳しい言語仕様の学習結果を二分探索法で確認
ステップ5 Re:Mindの詳しい言語仕様の学習結果を線形探索法で確認
ステップ4 Re:Mindの詳しい言語仕様の学習成果を保持するスコープを確認
ステップ3 Re:Mindの詳しい言語仕様を学習できる方法を確認
ステップ2 Re:Mindの言語仕様の認知度を確認
ステップ1 Re:Mindの認知度を確認 ↩ -
Copilotが生成した日本語トランスコンパイラ言語 Re:MindのASTパーサが動作するまで - Qiita
「Re:MindのASTパーサが動作するまで」の記事リストです。(ステップ降順)
ステップ12 いったん生成
ステップ11
ステップ10 生成済コードの伝達完了
ステップ9
ステップ8
ステップ7
ステップ6 生成済コードの伝達開始
ステップ5
ステップ4 Program.csが動作
ステップ3
ステップ2
ステップ1 検証環境構築 ↩ -
Copilotが生成した日本語トランスコンパイラ言語 Re:MindのC#コード生成が動作するまで - Qiita
「Re:MindのC#コード生成が動作するまで」の記事リストです。(ステップ降順)
ステップ4
ステップ3
ステップ2
ステップ1 ↩