🚀 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:
Selfhosting Dev
2025-09-14 19:16:32 +09:00
parent ab1afbc57b
commit 3ba96d9a03
30 changed files with 685 additions and 375 deletions

View File

@ -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 — 20250914】
- 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/)

View File

@ -37,6 +37,8 @@
**完了基準:**
- esc_dirname_smoke / dep_tree_min_string が PyVM と llvmlite で一致。
【Status 20250914】完了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
**要点:**