aboutsummaryrefslogtreecommitdiff
path: root/src/cljcc/token.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/cljcc/token.clj')
-rw-r--r--src/cljcc/token.clj248
1 files changed, 0 insertions, 248 deletions
diff --git a/src/cljcc/token.clj b/src/cljcc/token.clj
deleted file mode 100644
index 213588c..0000000
--- a/src/cljcc/token.clj
+++ /dev/null
@@ -1,248 +0,0 @@
-(ns cljcc.token)
-
-(def token-kind
- #{:eof
- :semicolon
- :comma
-
- ;; brackets
- :left-curly
- :right-curly
- :left-paren
- :right-paren
-
- ;; operators
- :multiply
- :divide
- :remainder
- :plus
- :minus
- :logical-not
- :logical-and
- :logical-or
- :equal-to
- :not-equal-to
- :less-than
- :greater-than
- :less-than-equal-to
- :greater-than-equal-to
- :bitwise-left-shift
- :bitwise-right-shift
- :ampersand
- :bitwise-xor
- :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
-
- :number
- :identifier
-
- ;; keywords
- :kw-return
- :kw-int
- :kw-long
- :kw-double
- :kw-void
- :kw-signed
- :kw-unsigned})
-
-(def unary-ops
- #{:logical-not
- :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))
-
-(def bin-ops
- "Binary operands and their precedence."
- {:multiply 100
- :divide 100
- :remainder 100
-
- :plus 90
- :hyphen 90
-
- :bitwise-left-shift 80
- :bitwise-right-shift 80
-
- :less-than 70
- :less-than-equal-to 70
- :greater-than 70
- :greater-than-equal-to 70
-
- :equal-to 60
- :not-equal-to 60
-
- :ampersand 50
-
- :bitwise-xor 40
-
- :bitwise-or 30
-
- :logical-and 20
-
- :logical-or 10
-
- :question 5
-
- :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))
-
-(defn logical? [v]
- (contains? #{:logical-and
- :logical-not
- :logical-or} v))
-
-(defn arithmetic? [v]
- (contains?
- #{:multiply
- :divide
- :remainder
- :plus
- :hyphen}
- v))
-
-(defn precedence [op]
- (op bin-ops))
-
-(def chrs-kind-map
- {\( :left-paren
- \) :right-paren
- \? :question
- \: :colon
- \, :comma
- \{ :left-curly
- \} :right-curly
- \= :assignment
- "--" :decrement
- "++" :increment
- "<<" :bitwise-left-shift
- ">>" :bitwise-right-shift
- \! :logical-not
- "&&" :logical-and
- "||" :logical-or
- "==" :equal-to
- "!=" :not-equal-to
- \< :less-than
- \> :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
- \; :semicolon
- \+ :plus
- \- :hyphen
- \~ :complement
- \* :multiply
- \% :remainder
- \/ :divide})
-
-(defn identifier->kind [identifier]
- (case identifier
- "return" :kw-return
- "void" :kw-void
- "int" :kw-int
- "long" :kw-long
- "double" :kw-double
- "if" :kw-if
- "else" :kw-else
- "do" :kw-do
- "while" :kw-while
- "for" :kw-for
- "break" :kw-break
- "continue" :kw-continue
- "static" :kw-static
- "extern" :kw-extern
- "signed" :kw-signed
- "unsigned" :kw-unsigned
- :identifier))
-
-(def type-specifier-keywords
- #{:kw-int :kw-long :kw-double :kw-signed :kw-unsigned})
-
-(def storage-specifier-keywords
- #{:kw-static :kw-extern})
-
-(defn create
- ([kind line col]
- {:kind kind
- :line line
- :col col})
- ([kind line col literal]
- {:kind kind
- :line line
- :col col
- :literal literal}))
-
-(def tacky-unary-ops
- #{:bit-not :negate :logical-not})
-
-(def tacky-binary-ops
- #{:add
- :sub
- :mul
- :div
- :mod
- :equal
- :not-equal
- :less-than
- :greater-than
- :less-or-equal
- :greater-or-equal
- :bit-and
- :bit-or
- :bit-xor
- :bit-right-shift
- :bit-left-shift})