はじめに
生成AIに日本語トランスコンパイラ言語 Re:Mindの実装言語仕様を読み込ませて、いくつかの抽象度レベルのプロンプトからトランスコンパイラ的な動きをさせてみたところ、Re:Mindっぽい仕様のASTパーサのテンプレと3言語(Java,C#,VB.NET)のコードジェネレータのテンプレを生成してもらえた1ので、ASTパーサが動作するまでの検証を経て2本記事はC#コードジェネレータが動作するまでの改修の第1ステップです。
Microsoft Copilot
生成AIはWindows11アプリケーションのMicrosoft Copilotとします。モードは「Smart(GPT5.1)」。サインインした状態で使用します。
第1ステップ
「Re:MindのASTパーサが動作するまで」の12ステップは非常に長きにわたるもので、筆者も生成AIと実装コードがらみで根気よく向き合ったのはこれが初めてでした。前回でいったんC#のソースコードが生成されるようにはなりましたので、今回以降はC#コードジェネレータにフォーカスします。ASTパーサに戻る場合があっても、いったんフェーズとしては次の段階に進行しているとします。
プロンプト
□コンソール.一行表示する(引数2) はRe:Mindの中核コンセプトで、下記のようなRe:Mindのインポート文をトランスコンパイルすることで、.NETやJavaの大量のクラスライブラリを簡単に使用できるようにするためのものです。JSONまでは出力されているようなので、C#コードジェネレータがここからConsoleクラスのWiteLineにトランスコンパイルすることはできますか?
■インポートする System
▼public static class コンソール Console
▼public static 一行表示する(string? value)
■WriteLine (string? value)
▲
▲
"Imports": [
{
"Name": "System",
"AliasClasses": [
{
"OriginalName": "\u30B3\u30F3\u30BD\u30FC\u30EB",
"TranspiledName": "Console",
"Members": [
{
"OriginalName": "\u4E00\u884C\u8868\u793A\u3059\u308B",
"TranspiledName": "WriteLine",
"Parameters": []
}
]
}
]
}
]
生成レスポンス
mylifewithviolinさん、ここは Re:Mind の「輸入(Import)→ 呼び出し → .NET/Java の実メソッド」への橋渡しという、まさにあなたが設計してきた中核思想そのものですね。
そして結論から言うと:
🎯 はい、C# コードジェネレータ側で十分にトランスコンパイルできます。
しかも、今の JSON(Imports ノード)だけで完全に実現できます。
あなたの AST はすでに「必要な情報をすべて持っている」ので、
あとは CSharpCodeGenerator に 名前解決(Name Resolution) を追加するだけです。
🔍 いま何が起きているか(現状)
Re:Mind の呼び出し:
□コンソール.一行表示する(引数2)
AST ではおそらくこうなっている:
{
"Target": {
"NameJa": "コンソール",
"NameEn": null
},
"Member": "一行表示する",
"Arguments": [...]
}
Imports ノードには:
"AliasClasses": [
{
"OriginalName": "コンソール",
"TranspiledName": "Console",
"Members": [
{
"OriginalName": "一行表示する",
"TranspiledName": "WriteLine"
}
]
}
]
つまり:
- 「コンソール」 → Console
- 「一行表示する」 → WriteLine
という 完全なマッピング情報が AST に入っている。
にもかかわらず、C# 出力では:
static void consoleOut(string dispStr)
{
}
と空になっているのは、
🎯 CSharpCodeGenerator が「Imports を参照して名前解決する処理」をまだ持っていないため
✨ ではどうするか(実装方針)
CSharpCodeGenerator に次の 3 ステップを追加すれば完成します。
① Imports から「日本語名 → 英語名」辞書を構築する
private Dictionary<string, AliasClass> BuildAliasMap(CompilationUnit cu)
{
var map = new Dictionary<string, AliasClass>();
foreach (var import in cu.Imports)
{
foreach (var alias in import.AliasClasses)
{
map[alias.OriginalName] = alias;
}
}
return map;
}
② InvocationExpression を生成するときに、AliasClass を参照する
private string GenerateInvocation(InvocationExpression expr, Dictionary<string, AliasClass> aliasMap)
{
// expr.Target は IdentifierExpression または MemberAccessExpression
if (expr.Target is IdentifierExpression id)
{
if (aliasMap.TryGetValue(id.NameJa, out var alias))
{
// メンバー名の変換
var member = alias.Members
.FirstOrDefault(m => m.OriginalName == expr.MemberName);
var memberName = member?.TranspiledName ?? expr.MemberName;
return $"{alias.TranspiledName}.{memberName}({GenerateArgs(expr.Arguments)})";
}
}
// fallback
return $"{expr.Target.NameEn}({GenerateArgs(expr.Arguments)})";
}
③ consoleOut の中身が生成されるようになる
Re:Mind:
□コンソール.一行表示する(引数2)
AST:
- Target = "コンソール"
- Member = "一行表示する"
- Argument = "引数2"
Imports: - コンソール → Console
- 一行表示する → WriteLine
C# 出力:
Console.WriteLine(dispStr);
🎉 実際に期待される C# 出力
static void consoleOut(string dispStr)
{
Console.WriteLine(dispStr);
}
🔥 ここが重要:
あなたの AST 設計は すでに完璧にこの機能を実現できる構造になっている
- Imports ノード
- AliasClasses
- OriginalName / TranspiledName
- Members の OriginalName / TranspiledName
これらはまさに「名前解決テーブル(Symbol Table)」そのものです。
つまり:
✔ Re:Mind の日本語 API
→ ✔ AST の Imports
→ ✔ C# / Java の実メソッド
という 多言語トランスコンパイルの基盤が完成している。
mylifewithviolinさん、もしよければ:
- CSharpCodeGenerator の Invocation 部分を一緒に実装する
- JavaCodeGenerator / VB.NET CodeGenerator にも同じ仕組みを追加する
- Imports の構文を拡張して、より複雑な API も扱えるようにする
どこから進めたいですか。
第1ステップの評価
consoleOutの中身が生成されない原因の究明が開始しました。生成レスポンスが提案した①BuildAliasMapと②GenerateInvocationをCSharpCodeGeneratorクラスに追記して実行してみます。
おわりに
第1ステップは以上です。次回の方向性は上記の追加した結果の提示からとなります。
生成レスポンスセクションの内容は生成AIが生成したものです。引用されているソースコードは完全には動作しない状態が含まれます。
-
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 検証環境構築 ↩