コンテンツにスキップ

Phase 1: コア言語基盤

ステータス: 完了

Phase 1の実装は完了しています。

概要

  • 目的: jv言語のコア基盤実装
  • 主要成果物: 基本構文パーサ、AST/IR、基本Java出力、CLI基盤
  • 実装期間: 2025年9月18日 - 2025年9月30日(約2週間)

主要機能

1. 字句解析・構文解析実装

1.1 Chumskyパーサコンビネータセットアップ

  • ✅ Chumskyライブラリの依存関係追加
  • ✅ 基本パーサ構造の設計
  • ✅ パーサテストフレームワークのセットアップ
  • ✅ エラーハンドリング機構の実装

1.2 基本構文糖衣パーシング

  • val/var宣言のパーシング
  • ✅ 型推論アノテーション(:)のパーシング
  • ✅ null安全演算子(?., ?:)のパーシング
  • ✅ 基本データ型(String, Int, Boolean等)のサポート
  • ✅ 基本的なコメント構文(//, /* */)のサポート

1.2.1 JSONCネイティブサポート

  • ✅ コメント付きJSON(JSONC)のパーシング実装
  • ✅ JSONリテラル内での//行コメントのサポート
  • ✅ JSONリテラル内での/* */ブロックコメントのサポート
  • ✅ JSONリテラルからの型推論システム
  • ✅ JSONリテラルのAST表現設計

1.2.2 複数行文字列ブロック

  • ✅ DSL指定なしの複数行文字列(```)のパーシング
  • ✅ 複数行文字列(""")のパーシング
  • ✅ 複数行文字列内での文字列補間(${variable})サポート
  • ✅ インデント正規化・トリミング機能
  • ✅ エスケープシーケンス処理

1.2.3 関数引数の文脈解釈

  • ✅ 桁区切りカンマ(1,234)と引数区切りの文脈依存パース
  • ✅ 同種型引数の空白区切りサポート(Point(100.5 200.3 50.0)
  • ✅ 異種型引数のキーワード指定サポート(timeout=5,000
  • ✅ Excel風可変長引数のカンマ省略(SUM(1 2 3 4 5)
  • ✅ 文脈判定ルールの実装とエラーメッセージ

1.2.4 JSONから自動POJO生成

  • ✅ JSONリテラルからのdata class自動生成
  • ✅ snake_case → camelCase変換規則の実装
  • ✅ ネストされたオブジェクトの型推論
  • ✅ 配列要素からの型推論(List<T>生成)
  • @Sample("file.json", mode=Embed)アノテーション処理
  • ✅ 外部JSONファイルからのPOJO生成
  • ✅ 型安全なアクセサ生成

1.2.5 新構文仕様アップデート(2025-10)

  • ✅ 空白区切り専用の関数呼び出し・配列引数パース(桁区切りカンマのみ許可)
  • ✅ 変数宣言の暗黙不変化(varのみ明示)に伴うAST/IR更新
  • data定義の簡略シンタックス(data Name(field ...))対応
  • ✅ 関連ドキュメント・エラー診断メッセージの更新

1.2.6 アンダースコア字句解析

  • _ 単独トークンの認識
  • _1, _2, _3, ... 暗黙引数トークンの認識
  • _0 の禁止検出(エラートークン)
  • ⬜ 識別子としての _ との区別ルール策定
  • ⬜ トークンタイプの定義(Underscore, ImplicitParam)

1.3 空白区切り配列パーシング

  • [1 2 3 4 5]形式の配列リテラルパーシング
  • ✅ 改行を含む配列構文のサポート
  • ✅ 混在したカンマ/空白構文のエラーハンドリング
  • ✅ 型推論のための配列要素型解析

1.4 文脈考慮パース実装

  • ✅ 関数呼び出しでの引数区切り判定ロジック
  • ✅ 同種型引数のカンマ省略サポート
  • ✅ 異種型引数での明示的区切り要求
  • ✅ エラーメッセージでの文脈説明機能

1.5 ループ構文更新(2025-09仕様)

  • while/do-while 構文サポート撤廃とガイド付きエラーメッセージ
  • for (item in range) の範囲演算子(..排他・..=包括)パース拡張
  • ✅ イテレータ/シーケンス対象のfor-in AST・IRリファクタリング
  • ✅ Javaコード生成のループ展開見直し(範囲・Iterable両対応)
  • ✅ 仕様変更の回帰テスト追加(inclusive/exclusive/非範囲イテレータ)
  • ✅ ループ仕様ドキュメント更新(新構文と置換ガイドライン)

1.6 when式仕様更新(2025-09仕様)

  • if/else 構文のパーサ廃止
  • ✅ 主語なしwhen {}構文のパースとAST拡張(条件ブロック形式)
  • when分岐の複合ガード(is T && 条件)対応とIR更新
  • ✅ Javaコード生成のwhen統合(switch式/if連鎖の適切な選択)
  • ✅ when仕様変更の回帰テスト(subject/subjectless/guard付き)
  • ✅ パターンマッチング仕様ドキュメントの更新(新構文例追加)

2. AST・IR設計

2.1 抽象構文木(AST)定義

  • ✅ ノード基底型の設計
  • ✅ 式(Expression)ノード階層の定義
  • ✅ 文(Statement)ノード階層の定義
  • ✅ 型アノテーション表現の設計
  • ✅ 位置情報(ソース位置)の埋め込み

2.2 中間表現(IR)設計

  • ✅ ASTからIRへの変換インターフェース
  • ✅ デシュガリング(糖衣構文展開)の設計
  • ✅ シンボルテーブル管理機構
  • ✅ スコープ管理システム
  • ✅ 型情報の付加構造

2.3 AST/IR相互変換

  • ✅ AST → IR変換器の実装
  • ✅ IR → AST復元機能(デバッグ用)
  • ✅ 変換プロセスのテストスイート
  • ✅ パフォーマンス最適化

3. 基本Javaコード生成

3.1 Java 25対応コードジェネレータ

  • ✅ Java 25構文生成エンジンの実装
  • ✅ recordクラス生成機能
  • ✅ sealed class/interface生成機能
  • ✅ パターンマッチング(switch式)生成機能
  • ✅ 仮想スレッド(Virtual Thread)統合

3.2 Java 21互換出力

  • ✅ Java 21フォールバック機能の実装
  • ✅ 機能制限警告システム
  • ✅ 互換性マトリックスの作成
  • ✅ バージョン固有最適化

3.3 基本構文変換

  • valfinal 変数変換
  • var → mutable変数変換
  • ✅ null安全演算子 → 三項演算子変換
  • ✅ 空白区切り配列 → Java配列/List変換
  • ✅ 基本データクラス → record変換

3.4 機能フォールバック機構

  • ✅ Java 25専用機能の検出
  • ✅ Java 21互換コードへの自動変換
  • ✅ 非互換機能の警告システム
  • ✅ ターゲットバージョン指定オプション

4. CLI基盤

4.1 jv buildコマンド実装

  • ✅ コマンドライン引数パーシング(clap使用)
  • ✅ 入力ファイル検索・読み込み
  • ✅ パーシング → AST → IR → Java変換パイプライン
  • ✅ 出力ファイル書き込み機能
  • ✅ エラーレポート機能

4.2 jv runコマンド実装

  • ✅ Javaファイルのコンパイル実行
  • ✅ メインクラス自動検出
  • ✅ 引数渡し機能
  • ✅ 実行時エラーハンドリング

4.3 javac統合

  • ✅ JavaコンパイラAPIの呼び出し
  • ✅ コンパイルエラーの捕捉・表示
  • ✅ クラスパス管理
  • ✅ 出力ディレクトリ管理
  • ✅ Java 25/21ターゲット指定

4.4 基本プロジェクト構造

  • jv.toml設定ファイルのパーシング
  • ✅ プロジェクトディレクトリ検出
  • ✅ ソースファイル探索機能
  • ✅ 出力ディレクトリ作成・管理

テスト・品質保証

単体テスト

  • ✅ パーサ機能のテストスイート作成
  • ✅ AST/IR変換のテストケース作成
  • ✅ Javaコード生成のテストケース作成
  • ✅ CLIコマンドの統合テスト作成

統合テスト

  • ✅ 端到端(.jv → .java → .class)テスト
  • ✅ エラーケースのテストカバレッジ
  • ✅ パフォーマンステスト(小規模ファイル)
  • ✅ クロスプラットフォームテスト

ドキュメント

  • ✅ API仕様書の作成
  • ✅ 設計決定記録(ADR)の作成
  • ✅ 基本利用ガイドの作成
  • ✅ トラブルシューティングガイドの作成

完了基準

機能完了基準

  • ✅ 基本的な.jvファイルのJava 25コードへのトランスパイルが動作
  • jv buildでコンパイルエラーなしにJavaコード生成
  • jv runで生成されたJavaコードの実行が可能
  • ✅ Java 21/25両ターゲットでの出力切り替えが動作

品質基準

  • ✅ 単体テストカバレッジ80%以上
  • ✅ 統合テストが全てパス
  • ✅ メモリ使用量が適切(小規模ファイルで100MB以下)
  • ✅ コンパイル時間が適切(1000行以下で3秒以内)

受け入れテスト

  • ✅ サンプル.jvファイルのビルド・実行成功
  • ✅ 基本的なエラーメッセージの表示確認
  • ✅ Java 21/25両環境での動作確認
  • ✅ Windows/Linux/macOSでの動作確認

注意事項・制約

実装上の注意

  • Rustのメモリ安全性を活用
  • パフォーマンスよりも正確性を優先
  • 将来の機能拡張を考慮した拡張可能な設計
  • エラーメッセージの分かりやすさを重視

既知の制限

  • フェーズ1では型推論は限定的(ローカルのみ)
  • 複雑な構文糖衣は後のフェーズで実装
  • パッケージ管理機能は未実装
  • LSP/IDEサポートは未実装

リスクと対策

  • リスク: chumskyパーサの学習コスト
  • 対策: サンプルコード作成、プロトタイプ先行開発
  • リスク: Java 25機能の理解不足
  • 対策: Java 25仕様書の詳細調査、サンプル実装
  • リスク: AST設計の複雑化
  • 対策: シンプルな設計から開始、段階的拡張

ロードマップドキュメント

このドキュメントは開発チェックリストに基づいて作成されています。