phase: 20.49 COMPLETE; 20.50 Flow+String minimal reps; 20.51 selfhost v0/v1 minimal (Option A/B); hv1-inline binop/unop/copy; docs + run_all + CURRENT_TASK -> 21.0

This commit is contained in:
nyash-codex
2025-11-06 15:41:52 +09:00
parent 2dc370223d
commit 77d4fd72b3
1658 changed files with 6288 additions and 2612 deletions

View File

@ -24,24 +24,24 @@ apps/lib/json_native/
├── ARCHITECTURE.md # この設計ドキュメント
├── core/ # 🌟 核心データ構造
│ ├── node.nyash # JsonNode - JSON値表現
│ ├── value.nyash # JsonValue - 型安全ラッパー
│ └── error.nyash # JsonError - エラーハンドリング
│ ├── node.hako # JsonNode - JSON値表現
│ ├── value.hako # JsonValue - 型安全ラッパー
│ └── error.hako # JsonError - エラーハンドリング
├── lexer/ # 🔍 字句解析層
│ ├── tokenizer.nyash # トークナイザー本体
│ ├── token.nyash # トークン定義
│ └── scanner.nyash # 文字スキャナー
│ ├── tokenizer.hako # トークナイザー本体
│ ├── token.hako # トークン定義
│ └── scanner.hako # 文字スキャナー
├── parser/ # 🏗️ 構文解析層
│ ├── parser.nyash # メインパーサー
│ ├── recursive.nyash # 再帰下降パーサー
│ └── validator.nyash # JSON妥当性検証
│ ├── parser.hako # メインパーサー
│ ├── recursive.hako # 再帰下降パーサー
│ └── validator.hako # JSON妥当性検証
├── utils/ # 🛠️ ユーティリティ
│ ├── string.nyash # 文字列処理ヘルパー
│ ├── escape.nyash # エスケープ処理
│ └── pretty.nyash # 整形出力
│ ├── string.hako # 文字列処理ヘルパー
│ ├── escape.hako # エスケープ処理
│ └── pretty.hako # 整形出力
├── tests/ # 🧪 テストスイート
│ ├── unit/ # 単体テスト
@ -49,29 +49,29 @@ apps/lib/json_native/
│ └── performance/ # 性能テスト
└── examples/ # 📖 使用例
├── basic.nyash # 基本的な使用例
├── advanced.nyash # 高度な使用例
└── benchmark.nyash # ベンチマーク例
├── basic.hako # 基本的な使用例
├── advanced.hako # 高度な使用例
└── benchmark.hako # ベンチマーク例
```
## 🎯 各モジュールの責務
### Core層 - データ構造の基盤
```nyash
// core/node.nyash - JSON値の抽象表現
// core/node.hako - JSON値の抽象表現
box JsonNode {
kind: StringBox // "null"|"bool"|"int"|"string"|"array"|"object"
value: Box // 実際の値
meta: Box // メタデータ(位置情報等)
}
// core/value.nyash - 型安全なアクセス
// core/value.hako - 型安全なアクセス
box JsonValue {
node: JsonNode // 内部ノード
// as_string(), as_int(), as_bool() 等の型安全メソッド
}
// core/error.nyash - エラー情報
// core/error.hako - エラー情報
box JsonError {
code: StringBox // エラーコード
message: StringBox // エラーメッセージ
@ -81,7 +81,7 @@ box JsonError {
### Lexer層 - 文字列をトークンに分解
```nyash
// lexer/token.nyash - トークン定義
// lexer/token.hako - トークン定義
box JsonToken {
type: StringBox // "STRING"|"NUMBER"|"LBRACE"|"RBRACE"等
value: StringBox // トークンの値
@ -89,7 +89,7 @@ box JsonToken {
end: IntegerBox // 終了位置
}
// lexer/tokenizer.nyash - メイントークナイザー
// lexer/tokenizer.hako - メイントークナイザー
box JsonTokenizer {
scanner: JsonScanner // 文字スキャナー
tokens: ArrayBox // 生成されたトークン配列
@ -98,14 +98,14 @@ box JsonTokenizer {
### Parser層 - トークンをASTに変換
```nyash
// parser/parser.nyash - メインパーサー
// parser/parser.hako - メインパーサー
box JsonParser {
tokenizer: JsonTokenizer // 字句解析器
current: IntegerBox // 現在のトークン位置
// parse() -> JsonNode
}
// parser/recursive.nyash - 再帰下降実装
// parser/recursive.hako - 再帰下降実装
static box RecursiveParser {
parse_value(tokens, pos) // 値をパース
parse_object(tokens, pos) // オブジェクトをパース
@ -115,14 +115,14 @@ static box RecursiveParser {
### Utils層 - 共通ユーティリティ
```nyash
// utils/string.nyash - 文字列処理
// utils/string.hako - 文字列処理
static box StringUtils {
trim(s) // 空白トリム
is_whitespace(ch) // 空白文字判定
is_digit(ch) // 数字判定
}
// utils/escape.nyash - エスケープ処理
// utils/escape.hako - エスケープ処理
static box EscapeUtils {
escape_string(s) // JSON文字列エスケープ
unescape_string(s) // JSONエスケープ解除
@ -202,7 +202,7 @@ Utils ────┴─────────┴─ (共通ユーティリテ
### 命名規則
- **Box名**: PascalCase (JsonNode, JsonParser)
- **メソッド名**: snake_case (parse_value, as_string)
- **ファイル名**: snake_case (tokenizer.nyash, recursive.nyash)
- **ファイル名**: snake_case (tokenizer.hako, recursive.hako)
### コメント戦略
- **なぜ**: 設計の意図を説明

View File

@ -1,7 +1,7 @@
// 簡単なNyashスクリプトJSON解析の「ずれ」問題分析
// yyjsonが必要になった理由と最小限の解決要件
using "apps/lib/json_native/core/node.nyash" as JsonNode
using "apps/lib/json_native/core/node.hako" as JsonNode
static box ParsingErrorAnalysis {

View File

@ -3,8 +3,8 @@
// that expects JsonDocBox/JsonNodeBox style methods can operate
// with json_native without changing call sites.
using "apps/lib/json_native/parser/parser.nyash" as JsonParserUtils
using "apps/lib/json_native/core/node.nyash" as JsonNode
using "apps/lib/json_native/parser/parser.hako" as JsonParserUtils
using "apps/lib/json_native/core/node.hako" as JsonNode
// Box that mimics a document holder with parse()/root()/error()
box JsonDocCompat {

View File

@ -3,8 +3,8 @@
// 美しいモジュラー設計: Utilsを活用してDRY原則を実践
// NOTE: relative paths to support alias packaging (nyash.toml)
using "../utils/string.nyash" as StringUtils
using "../utils/escape.nyash" as EscapeUtils
using "../utils/string.hako" as StringUtils
using "../utils/escape.hako" as EscapeUtils
// EscapeUtils は必要時に遅延includeする一部構文が未対応環境でも数値系は動かすため
// 🌟 JSON値を表現するBoxEverything is Box原則

View File

@ -2,9 +2,9 @@
// 責務: 文字列をトークン列に変換、エラー検出、位置情報管理
// NOTE: relative paths to support alias packaging (nyash.toml)
using "./scanner.nyash" as JsonScanner
using "./token.nyash" as JsonToken
using "../utils/escape.nyash" as EscapeUtils
using "./scanner.hako" as JsonScanner
using "./token.hako" as JsonToken
using "../utils/escape.hako" as EscapeUtils
// Removed other dependencies - using self-contained methods
// 🎯 高精度JSONトークナイザーEverything is Box

View File

@ -2,10 +2,10 @@
// 責務: トークン列をJsonNodeに変換、構文エラー検出、ネスト構造処理
// NOTE: use paths relative to this file to work under nyash.toml alias packaging
using "../lexer/tokenizer.nyash" as JsonTokenizer
using "../lexer/token.nyash" as TokenType
using "../core/node.nyash" as JsonNode
using "../utils/string.nyash" as StringUtils
using "../lexer/tokenizer.hako" as JsonTokenizer
using "../lexer/token.hako" as TokenType
using "../core/node.hako" as JsonNode
using "../utils/string.hako" as StringUtils
// 🎯 高精度JSON構文解析器Everything is Box
static box JsonParserModule {

View File

@ -1,4 +1,4 @@
using "apps/lib/json_native/core/compat.nyash" as JsonCompat
using "apps/lib/json_native/core/compat.hako" as JsonCompat
print("compat: begin")

View File

@ -1,6 +1,6 @@
// 最終統合テスト - Nyash JSON Native完全版
using "apps/lib/json_native/parser/parser.nyash" as JsonParserUtils
using "apps/lib/json_native/parser/parser.hako" as JsonParserUtils
static box FinalIntegrationTest {

View File

@ -1,6 +1,6 @@
// 完全統合テスト - 美しいモジュラー設計の動作確認
using "apps/lib/json_native/core/node.nyash" as JsonNode
using "apps/lib/json_native/core/node.hako" as JsonNode
print("🎨 Nyash JSON Native 統合テスト開始")
print("美しいモジュラー設計 vs yyjson巨大ファイル")

View File

@ -1,7 +1,7 @@
// Phase 2 精度テスト - yyjson相当精度の検証
using "apps/lib/json_native/parser/parser.nyash" as JsonParser
using "apps/lib/json_native/parser/parser.nyash" as JsonParserUtils
using "apps/lib/json_native/parser/parser.hako" as JsonParser
using "apps/lib/json_native/parser/parser.hako" as JsonParserUtils
static box Phase2AccuracyTest {

View File

@ -1,6 +1,6 @@
// JsonNode基本動作テスト - 80%の動く基盤を確認
using "apps/lib/json_native/core/node.nyash" as JsonNode
using "apps/lib/json_native/core/node.hako" as JsonNode
// ===== 基本値テスト =====

View File

@ -1,7 +1,7 @@
// Utils層テスト - StringUtils & EscapeUtilsの動作確認
using "apps/lib/json_native/utils/string.nyash" as StringUtils
using "apps/lib/json_native/utils/escape.nyash" as EscapeUtils
using "apps/lib/json_native/utils/string.hako" as StringUtils
using "apps/lib/json_native/utils/escape.hako" as EscapeUtils
print("🧪 Utils層テスト開始")

View File

@ -1,6 +1,6 @@
// yyjson置き換えテスト - 既存APIとの互換性確認
using "apps/lib/json_native/parser/parser.nyash" as JsonParserUtils
using "apps/lib/json_native/parser/parser.hako" as JsonParserUtils
// 🔄 既存JsonDocBox API互換テスト
static box JsonDocBoxCompatTest {
@ -88,7 +88,7 @@ static box JsonDocBoxCompatTest {
// 実際の使用例テスト
test_real_usage_examples() {
// apps/tests/jsonbox_parse_ok.nyash の内容をシミュレート
// apps/tests/jsonbox_parse_ok.hako の内容をシミュレート
print("Real usage example simulation:")
local examples = new ArrayBox()
@ -120,7 +120,7 @@ static box JsonDocBoxCompatTest {
// 既存のエラーケースをテスト
local error_cases = new ArrayBox()
error_cases.push("{\"kind\": }") // apps/tests/jsonbox_parse_err.nyash
error_cases.push("{\"kind\": }") // apps/tests/jsonbox_parse_err.hako
error_cases.push("{invalid json}")
error_cases.push("[1, 2, 3") // 不完全な配列
error_cases.push("{\"key\": \"value\",}") // 末尾カンマ