このセッションの成果
P4 fallback=0(#32 )に向け、生成マッパーの根本バグ(#43系)を中心に修正。correctnessバグは全て解消 し、2つのPRに反映済み。
クローズ済みissue(検証付き)
#11 , #12 , #23 , #25 , #27 , #29 , #30
修正(PR)
unlaxer-parser PR #44 (branch fix/issue-43-mapper-recursion) — MapperGenerator根治 + revision 3.0.5:
tinyexpression PR #34 (branch fix/issue-43-21-math-arithmetic) — unlaxer 3.0.5採用 + 評価器追従:
検証
abs(-3)+pow(2,3)=11, min(3,5,1)=1, max(3,5,1,9)=9, 'z'.in('a','b')=false, toUpperCase('abc')=='ABC'=true(P4_AST_EVALUATOR / P4_DSL_JAVA_CODE 両方)。パリティ/コーパス回帰ゼロ(160+テスト)。
⚠️ リリース調整(マージ前提・要手動)
tinyexpression PR #34 は unlaxer-dsl 3.0.5 の公開が前提 。手順:
unlaxer-parser PR handoff: P4 fallback=0 セッション (2026-06-27) — #32 codegen根治継続 (3.0.7/3.0.8/3.0.9 release) / 残り C=var宣言・型推論 #44 をマージ
unlaxer-dsl 3.0.5 を Maven Central へデプロイ (GPG/network gated の手動手順、#11参照)
tinyexpression PR fix(p4): math関数算術 & variadic min/max を正答化 (closes #21; refs #22,#43) #34 の CI が依存解決できるようになる → マージ
※ ローカル .m2 には 3.0.5(unlaxer-common / unlaxer-dsl / 親pom)インストール済みなので、ローカルビルド/検証は可能。Central未公開のため #34 のCIは現状赤。
残作業
再開手順
ローカル: 両リポジトリは各fixブランチをcheckout済み。unlaxer-parser revision=3.0.5、.m2 に 3.0.5 導入済み。
tinyexpression のビルド: mvn -o test -Dtinyexpression.skipRailroad=true -Dgpg.skip=true -Dmaven.javadoc.skip=true -Dtest=...(railroad SVG生成はnoise源なのでskip推奨)
生成物はクリーンビルドで再生成: rm -rf target/generated-sources target/classes
文法変更時は unlaxer-dsl を .m2 に再install: cd unlaxer-parser && mvn -o -q install -pl unlaxer-dsl -DskipTests -Dgpg.skip=true -Dmaven.javadoc.skip=true -Dspotbugs.skip=true -Derrorprone.skip=true
既知の落とし穴: surefire-reports は累積するので集計前に rm -rf target/surefire-reports。baselineゲートあり(test-baseline.txt)。
関連: #32 , #35 , #22 , #21 , unlaxer-parser#43/#44
このセッションの成果
P4 fallback=0(#32)に向け、生成マッパーの根本バグ(#43系)を中心に修正。correctnessバグは全て解消し、2つのPRに反映済み。
クローズ済みissue(検証付き)
#11, #12, #23, #25, #27, #29, #30
修正(PR)
unlaxer-parser PR #44 (branch
fix/issue-43-mapper-recursion) — MapperGenerator根治 + revision 3.0.5:bc8286dchore: adopt unlaxer-dsl 3.0.9 (nested-slice multi-rule dispatch; #32) #43 case1: 異種assocオペランド(関数/条件factor)を実ASTノードへ。abs(-3)+pow(2,3)の関数脱落/StackOverflow解消840c6e9chore: adopt unlaxer-dsl 3.0.9 (nested-slice multi-rule dispatch; #32) #43 case3: variadic捕捉が先頭スカラーを再収集しない。.in()常時true解消5de9eedfindDescendantsをルールレベル収集に。string比較のnode.left()/right()正常化18910c1revision 3.0.4→3.0.5tinyexpression PR #34 (branch
fix/issue-43-21-math-arithmetic) — unlaxer 3.0.5採用 + 評価器追従:ca22622math関数算術正答化 + cross-check が正しいP4結果を壊れたlegacyで上書きする (variadic min/max・boolean優先順位・関数項脱落) #21 cross-check是正(min/max正答)+ 評価器/emitterを基底IFオペランドに追従 + 宣言式主式をP4-typed評価 (closes cross-check が正しいP4結果を壊れたlegacyで上書きする (variadic min/max・boolean優先順位・関数項脱落) #21; refs P4 機能ギャップ: ブロックコメント / len / ダブルクォート / .in / 宣言setter / scope / javacode math未対応 #22,chore: adopt unlaxer-dsl 3.0.9 (nested-slice multi-rule dispatch; #32) #43)c7132abstring比較をAST直接評価に、ソース分割workaround約130行削除検証
abs(-3)+pow(2,3)=11,min(3,5,1)=1,max(3,5,1,9)=9,'z'.in('a','b')=false,toUpperCase('abc')=='ABC'=true(P4_AST_EVALUATOR / P4_DSL_JAVA_CODE 両方)。パリティ/コーパス回帰ゼロ(160+テスト)。tinyexpression PR #34 は unlaxer-dsl 3.0.5 の公開が前提。手順:
※ ローカル .m2 には 3.0.5(unlaxer-common / unlaxer-dsl / 親pom)インストール済みなので、ローカルビルド/検証は可能。Central未公開のため #34 のCIは現状赤。
残作業
"hello".length())= 文法Phase 2再設計が必要(今回試行したが string比較を退化させたため revert)。メソッド引数スコープ。if(not(toUpperCase('..')[4:6].in(...)))は依然 legacy fallback。再開手順
unlaxer-parserrevision=3.0.5、.m2に 3.0.5 導入済み。mvn -o test -Dtinyexpression.skipRailroad=true -Dgpg.skip=true -Dmaven.javadoc.skip=true -Dtest=...(railroad SVG生成はnoise源なのでskip推奨)rm -rf target/generated-sources target/classes.m2に再install:cd unlaxer-parser && mvn -o -q install -pl unlaxer-dsl -DskipTests -Dgpg.skip=true -Dmaven.javadoc.skip=true -Dspotbugs.skip=true -Derrorprone.skip=truerm -rf target/surefire-reports。baselineゲートあり(test-baseline.txt)。関連: #32, #35, #22, #21, unlaxer-parser#43/#44