imported kevin's three token-parser choices into core.clj

This commit is contained in:
Richard Harrington 2013-07-16 11:20:26 -04:00
parent 4d368578cb
commit 0db4cf7f7a

View File

@ -63,18 +63,36 @@
(def return-err (ignoring-args-thunk "Invalid word or symbol"))
(def parser-priority
[[registers :register]
[commands :command]
[str->int :number]
[valid-word :label]
[return-err :error]])
(defn parse-token
"takes a single token and adds the appropriate metadata"
[{token-str :token-str, pos :pos}]
[{:keys [token-str pos]}]
(some
(fn [[parser token-type]]
(when-let [token-val (parser token-str)]
{:val token-val, :type token-type, :pos pos}))
[[registers :register]
[commands :command]
[str->int :number]
[valid-word :label]
[return-err :error]]))
parser-priority))
(defn parse-token-2
"takes a single token and adds the appropriate metadata"
[{:keys [token-str pos]}]
(first (for [[parser token-type] parser-priority
:let [token-val (parser token-str)]
:when token-val]
{:val token-val, :type token-type, :pos pos})))
(defn parse-token-3
"takes a single token and adds the appropriate metadata"
[{:keys [token-str pos]}]
(some identity (for [[parser token-type] parser-priority]
(when-let [token-val (parser token-str)]
{:val token-val, :type token-type, :pos pos}))))
(def value-type? #{:number :register})