summaryrefslogtreecommitdiff
path: root/chapter23/docs
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-24 15:26:23 -0700
committerCliff Click <cliffc@acm.org>2026-10-24 15:26:23 -0700
commite2b042bd9721995486f4f0cf96847c02d27908e3 (patch)
tree04383ad5e3659f1f9a78637b9a0bba314f4453f7 /chapter23/docs
parent4ae6a06d94b228a5eb67c8473131a791e310c233 (diff)
downloadSimple-e2b042bd9721995486f4f0cf96847c02d27908e3.tar.gz
Simple-e2b042bd9721995486f4f0cf96847c02d27908e3.zip
Fix chained comparisons and restore recursion coverage
Diffstat (limited to 'chapter23/docs')
-rw-r--r--chapter23/docs/23-grammar.ja.md9
-rw-r--r--chapter23/docs/23-grammar.md9
2 files changed, 14 insertions, 4 deletions
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