diff options
author | Eduardo Julian | 2015-08-28 06:37:46 -0400 |
---|---|---|
committer | Eduardo Julian | 2015-08-28 06:37:46 -0400 |
commit | f403ee7a9662f81c91aa124f0573c5957a88ebe5 (patch) | |
tree | ee5d447757614421f408decede0c88a8cbfc859b /src/lux/parser.clj | |
parent | 37a9044d8ec523a282c0470d65380ce5cff27084 (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.clj | 62 |
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.") |