From 276b0c200e5159b1d099ff85aab544480c2ac757 Mon Sep 17 00:00:00 2001 From: Shagun Agrawal Date: Fri, 30 Aug 2024 18:49:17 +0530 Subject: Add compound assignment operators Added compound assignment operators ( >>==, += etc ) Pass chapter 5 extra credit tests --- src/cljcc/token.clj | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'src/cljcc/token.clj') diff --git a/src/cljcc/token.clj b/src/cljcc/token.clj index dc1d125..883dda8 100644 --- a/src/cljcc/token.clj +++ b/src/cljcc/token.clj @@ -32,6 +32,16 @@ :bitwise-or :negate :assignemnt + :assignment-plus + :assignment-multiply + :assignment-minus + :assignment-divide + :assignment-mod + :assignment-bitwise-and + :assignment-bitwise-or + :assignment-bitwise-xor + :assignment-bitwise-left-shift + :assignment-bitwise-right-shift :increment :decrement @@ -48,6 +58,22 @@ :complement :hyphen}) +(def assignment-ops + #{:assignment + :assignment-plus + :assignment-multiply + :assignment-minus + :assignment-divide + :assignment-mod + :assignment-bitwise-and + :assignment-bitwise-or + :assignment-bitwise-xor + :assignment-bitwise-left-shift + :assignment-bitwise-right-shift}) + +(defn assignment-op? [op] + (contains? assignment-ops op)) + (defn unary-op? [op] (contains? unary-ops op)) @@ -81,7 +107,17 @@ :logical-or 10 - :assignment 1}) + :assignment 1 + :assignment-plus 1 + :assignment-multiply 1 + :assignment-minus 1 + :assignment-divide 1 + :assignment-mod 1 + :assignment-bitwise-and 1 + :assignment-bitwise-or 1 + :assignment-bitwise-xor 1 + :assignment-bitwise-left-shift 1 + :assignment-bitwise-right-shift 1}) (defn binary-op? [op] (contains? bin-ops op)) @@ -108,6 +144,16 @@ \> :greater-than "<=" :less-than-equal-to ">=" :greater-than-equal-to + "+=" :assignment-plus + "*=" :assignment-multiply + "-=" :assignment-minus + "/=" :assignment-divide + "%=" :assignment-mod + "&=" :assignment-bitwise-and + "|=" :assignment-bitwise-or + "^=" :assignment-bitwise-xor + "<<=" :assignment-bitwise-left-shift + ">>=" :assignment-bitwise-right-shift \^ :bitwise-xor \| :bitwise-or \& :ampersand -- cgit v1.2.3