mirror of
https://github.com/richardharrington/robotwar.git
synced 2024-10-03 03:55:43 +00:00
imported kevin's three token-parser choices into core.clj
This commit is contained in:
parent
4d368578cb
commit
0db4cf7f7a
@ -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})
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user