From caa2b978e5a0a83b2615e1e703ce1ec07bf86f77 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 30 Dec 2024 14:16:36 -0800 Subject: Test for "arg--2" Parse as "arg - -2" and not "arg-- 2" which is a syntax error --- chapter17/src/main/java/com/seaofnodes/simple/Parser.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'chapter17/src/main/java/com') diff --git a/chapter17/src/main/java/com/seaofnodes/simple/Parser.java b/chapter17/src/main/java/com/seaofnodes/simple/Parser.java index 1cdf27fb..570ae67e 100644 --- a/chapter17/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter17/src/main/java/com/seaofnodes/simple/Parser.java @@ -1412,6 +1412,7 @@ public class Parser { // Next oper= character, or 0. // As a convenience, mark "++" as a char 1 and "--" as char -1 (65535) + // Disallow e.g. "arg--1" which should parse as "arg - -1" public char matchOperAssign() { skipWhiteSpace(); if( _position+2 >= _input.length ) return 0; @@ -1419,6 +1420,7 @@ public class Parser { if( "+-/*&|^".indexOf(ch0) == -1 ) return 0; char ch1 = (char)_input[_position+1]; if( ch1 == '=' ) { _position += 2; return ch0; } + if( Character.isDigit(_input[_position+2]) ) return 0; if( ch0 == '+' && ch1 == '+' ) { _position += 2; return (char) 1; } if( ch0 == '-' && ch1 == '-' ) { _position += 2; return (char)-1; } return 0; -- cgit v1.2.3