diff --git a/src/expression/Parse.go b/src/expression/Parse.go index 0c30be3..f4e261a 100644 --- a/src/expression/Parse.go +++ b/src/expression/Parse.go @@ -71,7 +71,9 @@ loop: root = node } - cursor = node + if !cursor.Token.Kind.IsUnaryOperator() || !node.Token.Kind.IsUnaryOperator() { + cursor = node + } } i++ diff --git a/src/expression/Parse_test.go b/src/expression/Parse_test.go index ca8ec20..ad139c9 100644 --- a/src/expression/Parse_test.go +++ b/src/expression/Parse_test.go @@ -59,17 +59,21 @@ func TestParse(t *testing.T) { {"Unary not", "!", "!"}, {"Unary not 2", "!a", "(! a)"}, - {"Unary not 3", "!(!a)", "(! (! a))"}, - {"Unary not 4", "!(a||b)", "(! (|| a b))"}, - {"Unary not 5", "a || !b", "(|| a (! b))"}, + {"Unary not 3", "!!a", "(! (! a))"}, + {"Unary not 4", "!!!a", "(! (! (! a)))"}, + {"Unary not 5", "!(!a)", "(! (! a))"}, + {"Unary not 6", "!(a||b)", "(! (|| a b))"}, + {"Unary not 7", "a || !b", "(|| a (! b))"}, {"Unary minus", "-", "-"}, {"Unary minus 2", "-a", "(- a)"}, - {"Unary minus 3", "-(-a)", "(- (- a))"}, - {"Unary minus 4", "-a+b", "(+ (- a) b)"}, - {"Unary minus 5", "-(a+b)", "(- (+ a b))"}, - {"Unary minus 6", "a + -b", "(+ a (- b))"}, - {"Unary minus 7", "-a + -b", "(+ (- a) (- b))"}, + {"Unary minus 3", "--a", "(- (- a))"}, + {"Unary minus 4", "---a", "(- (- (- a)))"}, + {"Unary minus 5", "-(-a)", "(- (- a))"}, + {"Unary minus 6", "-a+b", "(+ (- a) b)"}, + {"Unary minus 7", "-(a+b)", "(- (+ a b))"}, + {"Unary minus 8", "a + -b", "(+ a (- b))"}, + {"Unary minus 9", "-a + -b", "(+ (- a) (- b))"}, {"Assign bitwise operation", "a|=b", "(|= a b)"}, {"Assign bitwise operation 2", "a|=b<