aboutsummaryrefslogtreecommitdiff
path: root/src/lux/parser.clj
diff options
context:
space:
mode:
authorEduardo Julian2015-08-28 06:37:46 -0400
committerEduardo Julian2015-08-28 06:37:46 -0400
commitf403ee7a9662f81c91aa124f0573c5957a88ebe5 (patch)
treeee5d447757614421f408decede0c88a8cbfc859b /src/lux/parser.clj
parent37a9044d8ec523a282c0470d65380ce5cff27084 (diff)
Due to several performance issues and my inability to optimize them away due to too many corner cases, I decided the abandon the path towards a more mathematical implementation of tuples & variants.
Diffstat (limited to '')
-rw-r--r--src/lux/parser.clj62
1 files changed, 31 insertions, 31 deletions
diff --git a/src/lux/parser.clj b/src/lux/parser.clj
index c40221d63..eaa22db20 100644
--- a/src/lux/parser.clj
+++ b/src/lux/parser.clj
@@ -14,22 +14,22 @@
[lexer :as &lexer])))
;; [Tags]
-(deftags
- ["White_Space"
- "Comment"
- "Bool"
- "Int"
- "Real"
- "Char"
- "Text"
- "Symbol"
- "Tag"
- "Open_Paren"
- "Close_Paren"
- "Open_Bracket"
- "Close_Bracket"
- "Open_Brace"
- "Close_Brace"]
+(deftags ""
+ "White_Space"
+ "Comment"
+ "Bool"
+ "Int"
+ "Real"
+ "Char"
+ "Text"
+ "Symbol"
+ "Tag"
+ "Open_Paren"
+ "Close_Paren"
+ "Open_Bracket"
+ "Close_Bracket"
+ "Open_Brace"
+ "Close_Brace"
)
;; [Utils]
@@ -38,8 +38,8 @@
(|do [elems (&/repeat% parse)
token &lexer/lex]
(|case token
- [meta [<close-token> _]]
- (return (&/S <tag> (&/fold &/|++ (&/|list) elems)))
+ (&/$Meta meta [<close-token> _])
+ (return (&/V <tag> (&/fold &/|++ (&/|list) elems)))
_
(fail (str "[Parser Error] Unbalanced " <description> ".")))))
@@ -53,9 +53,9 @@
token &lexer/lex
:let [elems (&/fold &/|++ (&/|list) elems*)]]
(|case token
- [meta ($Close_Brace _)]
+ (&/$Meta meta ($Close_Brace _))
(if (even? (&/|length elems))
- (return (&/S &/$RecordS (&/|as-pairs elems)))
+ (return (&/V &/$RecordS (&/|as-pairs elems)))
(fail (str "[Parser Error] Records must have an even number of elements.")))
_
@@ -64,7 +64,7 @@
;; [Interface]
(def parse
(|do [token &lexer/lex
- :let [[meta token*] token]]
+ :let [(&/$Meta meta token*) token]]
(|case token*
($White_Space _)
(return (&/|list))
@@ -73,37 +73,37 @@
(return (&/|list))
($Bool ?value)
- (return (&/|list (&/P meta (&/S &/$BoolS (Boolean/parseBoolean ?value)))))
+ (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$BoolS (Boolean/parseBoolean ?value))))))
($Int ?value)
- (return (&/|list (&/P meta (&/S &/$IntS (Long/parseLong ?value)))))
+ (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$IntS (Long/parseLong ?value))))))
($Real ?value)
- (return (&/|list (&/P meta (&/S &/$RealS (Double/parseDouble ?value)))))
+ (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$RealS (Double/parseDouble ?value))))))
($Char ^String ?value)
- (return (&/|list (&/P meta (&/S &/$CharS (.charAt ?value 0)))))
+ (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$CharS (.charAt ?value 0))))))
($Text ?value)
- (return (&/|list (&/P meta (&/S &/$TextS ?value))))
+ (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$TextS ?value)))))
($Symbol ?ident)
- (return (&/|list (&/P meta (&/S &/$SymbolS ?ident))))
+ (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$SymbolS ?ident)))))
($Tag ?ident)
- (return (&/|list (&/P meta (&/S &/$TagS ?ident))))
+ (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$TagS ?ident)))))
($Open_Paren _)
(|do [syntax (parse-form parse)]
- (return (&/|list (&/P meta syntax))))
+ (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
($Open_Bracket _)
(|do [syntax (parse-tuple parse)]
- (return (&/|list (&/P meta syntax))))
+ (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
($Open_Brace _)
(|do [syntax (parse-record parse)]
- (return (&/|list (&/P meta syntax))))
+ (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
_
(fail "[Parser Error] Unknown lexer token.")