🚀 feat: Multiple improvements for Nyash parser and LLVM backend
Parser improvements: - Added expression statement fallback in parse_statement() for flexible syntax - Fixed ternary operator to use PeekExpr instead of If AST (better lowering) - Added peek_token() check to avoid ?/?: operator conflicts LLVM Python improvements: - Added optional ESC_JSON_FIX environment flag for string concatenation - Improved PHI generation with better default handling - Enhanced substring tracking for esc_json pattern Documentation updates: - Updated language guide with peek expression examples - Added box theory diagrams to Phase 15 planning - Clarified peek vs when syntax differences These changes enable cleaner parser implementation for self-hosting, especially for handling digit conversion with peek expressions instead of 19-line if-else chains. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -26,11 +26,25 @@ MIR 13命令の美しさを最大限に活かし、外部コンパイラ依存
|
||||
- ランナー統合: `NYASH_VM_USE_PY=1` で MIR(JSON) を PyVM に渡して実行
|
||||
- 代表スモーク(esc_dirname_smoke / dep_tree_min_string)で llvmlite とパリティ確認
|
||||
|
||||
### Phase 15.3: NyashコンパイラMVP(後段)
|
||||
【Current Status — 2025‑09‑14】
|
||||
- A6 受入達成: esc_dirname_smoke の PyVM↔llvmlite パリティ一致(ゲートOFF)、LLVM verifier green → .o → リンク → 実行OK。
|
||||
- dep_tree_min_string: PyVM↔llvmlite パリティ一致、llvmlite 経路で `.ll verify → .o → EXE` 完走。
|
||||
- 一時救済ゲート `NYASH_LLVM_ESC_JSON_FIX` は受入には未使用(OFF)。
|
||||
|
||||
### Phase 15.3: NyashコンパイラMVP(次フェーズ着手)
|
||||
- PyVM 安定後、Nyash製パーサ/レクサ(サブセット)と MIR ビルダを段階導入
|
||||
- フラグでRustフォールバックと併存(例: `NYASH_USE_NY_COMPILER=1`)
|
||||
- JIT不要、PyVM/llvmlite のパリティで正しさを担保
|
||||
|
||||
【Kickoff 目標(MVP)】
|
||||
- ステージ1: Ny→JSON v0 パイプ(整数/文字列/加減乗除/括弧/return)。CLI: `--ny-parser-pipe` と互換のJSONを生成。
|
||||
- ステージ2: 文/式サブセット拡張(local/if/loop/call/method/new/me/substring/length/lastIndexOf)。
|
||||
- ステージ3: Ny AST→MIR JSON 降下(直接 llvmlite/PyVM へ渡す)。
|
||||
|
||||
【受入(MVP)】
|
||||
- `tools/ny_roundtrip_smoke.sh` 緑(Case A/B)。
|
||||
- `apps/tests/esc_dirname_smoke.nyash` / `apps/selfhost/tools/dep_tree_min_string.nyash` を Ny パーサ経路で実行し、PyVM/llvmlite とパリティ一致(stdout/exit)。
|
||||
|
||||
### Phase 15.4: VM層のNyash化(PyVMからの置換)
|
||||
- PyVM を足場に、VMコアを Nyash 実装へ段階移植(命令サブセットから)
|
||||
- 動的ディスパッチで13命令処理を目標に拡張
|
||||
@ -221,6 +235,10 @@ ny_free_buf(buffer)
|
||||
### 🔧 実行チェックリスト
|
||||
- [ROADMAP.md](ROADMAP.md) - 進捗管理用チェックリスト
|
||||
|
||||
### ✅ クイックスモーク(現状)
|
||||
- PyVM↔llvmlite パリティ: `tools/parity.sh --lhs pyvm --rhs llvmlite apps/tests/esc_dirname_smoke.nyash`
|
||||
- dep_tree(ハーネスON): `NYASH_LLVM_FEATURE=llvm ./tools/build_llvm.sh apps/selfhost/tools/dep_tree_min_string.nyash -o app_dep && ./app_dep`
|
||||
|
||||
### 📚 関連フェーズ
|
||||
- [Phase 10: Cranelift JIT](../phase-10/)
|
||||
- [Phase 12.5: 最適化戦略](../phase-12.5/)
|
||||
|
||||
@ -37,6 +37,8 @@
|
||||
**完了基準:**
|
||||
- esc_dirname_smoke / dep_tree_min_string が PyVM と llvmlite で一致。
|
||||
|
||||
【Status 2025‑09‑14】完了(A6 受入)。
|
||||
|
||||
### 3) using(ゲート付き)設計・実装(15.2/15.3)
|
||||
|
||||
**要点:**
|
||||
@ -51,6 +53,22 @@
|
||||
**完了基準:**
|
||||
- フラグONで using 経路が動作し、未解決時の診断・キャッシュ挙動がテストで担保。
|
||||
|
||||
【Next】Ny パーサMVPと並走で段階導入(フラグ: `--enable-using`/`NYASH_ENABLE_USING=1`)。
|
||||
|
||||
### 3.5) Nyash パーサMVP(サブセット)
|
||||
|
||||
**要点:**
|
||||
- ステージ1: Ny→JSON v0 パイプ(最小表現)。
|
||||
- ステージ2: 文/式のサブセット拡張。
|
||||
- ステージ3: Ny AST→MIR JSON 直接降下(llvmlite/PyVMへ)。
|
||||
|
||||
**スモーク/CI:**
|
||||
- `tools/ny_roundtrip_smoke.sh` / `tools/ny_parser_bridge_smoke.sh`
|
||||
- `tools/parity.sh --lhs pyvm --rhs llvmlite <smoke.nyash>`(Nyパーサ経路ON)
|
||||
|
||||
**完了基準:**
|
||||
- esc_dirname_smoke / dep_tree_min_string が Ny パーサ経路でも PyVM/llvmlite と一致(stdout/exit)。
|
||||
|
||||
### 4) nyash.link ミニマルリゾルバ(15.4)
|
||||
|
||||
**要点:**
|
||||
|
||||
Reference in New Issue
Block a user