Skip to content

perf: 生成パーサの指数バックトラック — 二重カッコ三項/ソース再パース経路で秒〜分単位の遅延 #38

Description

@opaopa6969

症状

生成された P4 パーサが特定の構造で指数的バックトラックを起こし、パースに秒〜分かかる。

実測

  • sin(( > 0 ? : 0))(二重カッコ三項): パース ~5秒 → 最終的に ParseExceptionTernaryExpressionTest#testTernaryInSinWithDoubleParensStillWorkstest-baseline.txt の唯一の既知失敗として残存。
  • if-source shadow(tryEvaluateIfFromSource)を無効化して AST 経路を強制すると、P4AstEvaluatorCalculatorTest約1048秒(通常は十数秒)。条件内の文字列値サブ式が tryEvaluateStructuredStringLeaf でソース再パースに落ち、その再パースが重い構造でバックトラックするため。

原因

影響

  • #32 fallback=0: if-source shadow を外すと上記の遅延が顕在化。fallback=0 達成には本性能問題の解決も前提。
  • CI: 二重カッコ三項は baseline 既知失敗として許容中。

対策候補

  1. unlaxer-parser handoff: P4 fallback=0 セッション (2026-06-26) — #43 codegen根治継続 / #32 第2段 string-concat fold widening の再開手順 #40 (packrat) を opt-in で生成パーサに適用。
  2. ArgumentExpression ::= ArgumentTernary | Expression の選択順・曖昧性を見直し(左因子化など)。
  3. ソース再パース経路の除去(refactor: ソース文字列再パースworkaround層をAST直接利用へ真っ当化 (~180箇所/17ファイル) #35)が進めば再パース起因の遅延は自然消滅。

関連: #32, #35, unlaxer-parser#40

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions