diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-24 15:26:23 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-24 15:26:23 -0700 |
| commit | e2b042bd9721995486f4f0cf96847c02d27908e3 (patch) | |
| tree | 04383ad5e3659f1f9a78637b9a0bba314f4453f7 /chapter23/docs | |
| parent | 4ae6a06d94b228a5eb67c8473131a791e310c233 (diff) | |
| download | Simple-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.md | 9 | ||||
| -rw-r--r-- | chapter23/docs/23-grammar.md | 9 |
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 |
