From e2b042bd9721995486f4f0cf96847c02d27908e3 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Sat, 24 Oct 2026 15:26:23 -0700 Subject: Fix chained comparisons and restore recursion coverage --- chapter23/docs/23-grammar.ja.md | 9 +++++++-- chapter23/docs/23-grammar.md | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'chapter23/docs') diff --git a/chapter23/docs/23-grammar.ja.md b/chapter23/docs/23-grammar.ja.md index ff7b5d56..682bd967 100644 --- a/chapter23/docs/23-grammar.ja.md +++ b/chapter23/docs/23-grammar.ja.md @@ -80,11 +80,16 @@ expression : logicalExpression ('?' assignment (':' assignment)?)? ; logicalExpression : bitwiseExpression (('&&' | '||') logicalExpression)? ; bitwiseExpression - : comparisonExpression (('&' | '|' | '^') comparisonExpression)* + : equalityExpression (('&' | '|' | '^') equalityExpression)* ; +equalityExpression : comparisonExpression (('==' | '!=') comparisonExpression)* ; + +// Compare adjacent operands once; stop after the first false comparison. +// Keep one direction per chain; < and <= (or > and >=) may mix. comparisonExpression - : shiftExpression (('==' | '!=' | '<' | '<=' | '>' | '>=') shiftExpression)* + : shiftExpression (('<' | '<=') shiftExpression)* + | shiftExpression (('>' | '>=') shiftExpression)+ ; shiftExpression diff --git a/chapter23/docs/23-grammar.md b/chapter23/docs/23-grammar.md index 1d52d5a6..cd231b08 100644 --- a/chapter23/docs/23-grammar.md +++ b/chapter23/docs/23-grammar.md @@ -80,11 +80,16 @@ expression : logicalExpression ('?' assignment (':' assignment)?)? ; logicalExpression : bitwiseExpression (('&&' | '||') logicalExpression)? ; bitwiseExpression - : comparisonExpression (('&' | '|' | '^') comparisonExpression)* + : equalityExpression (('&' | '|' | '^') equalityExpression)* ; +equalityExpression : comparisonExpression (('==' | '!=') comparisonExpression)* ; + +// Compare adjacent operands once; stop after the first false comparison. +// Keep one direction per chain; < and <= (or > and >=) may mix. comparisonExpression - : shiftExpression (('==' | '!=' | '<' | '<=' | '>' | '>=') shiftExpression)* + : shiftExpression (('<' | '<=') shiftExpression)* + | shiftExpression (('>' | '>=') shiftExpression)+ ; shiftExpression -- cgit v1.2.3