diff options
Diffstat (limited to 'src/Parser.hs')
-rw-r--r-- | src/Parser.hs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/Parser.hs b/src/Parser.hs index 6ec4ba0..f83f4cc 100644 --- a/src/Parser.hs +++ b/src/Parser.hs | |||
@@ -21,7 +21,6 @@ data Expr = List [Expr] | |||
21 | | FloatLiteral Double | 21 | | FloatLiteral Double |
22 | | BoolLiteral Bool | 22 | | BoolLiteral Bool |
23 | | Id String | 23 | | Id String |
24 | | NoReturn | ||
25 | deriving (Eq) | 24 | deriving (Eq) |
26 | 25 | ||
27 | -- backslash double quote escapes a quote inside strings | 26 | -- backslash double quote escapes a quote inside strings |
@@ -83,15 +82,16 @@ optionalWhiteSpace :: Parser () | |||
83 | optionalWhiteSpace = skipMany $ oneOf [' ', '\n'] | 82 | optionalWhiteSpace = skipMany $ oneOf [' ', '\n'] |
84 | 83 | ||
85 | type Alias = String | 84 | type Alias = String |
86 | parseModifier :: Char -> Alias -> Parser Expr | 85 | parseModifier :: String -> Alias -> Parser Expr |
87 | parseModifier c alias = do | 86 | parseModifier s alias = do |
88 | char c | 87 | string s |
89 | x <- parseLispValue | 88 | x <- parseLispValue |
90 | return $ List [Id alias, x] | 89 | return $ List [Id alias, x] |
91 | 90 | ||
92 | parseQuote = parseModifier '\'' "quote" | 91 | parseQuote = parseModifier "'" "quote" |
93 | parseQuasiquote = parseModifier '`' "quasiquote" | 92 | parseQuasiquote = parseModifier "`" "quasiquote" |
94 | parseUnquote = parseModifier ',' "unquote" | 93 | parseUnquote = parseModifier "," "unquote" |
94 | parseUnquoteSplicing = parseModifier ",@" "unquote-splicing" | ||
95 | -- TODO: add modifier for unquote splicing: ,@ | 95 | -- TODO: add modifier for unquote splicing: ,@ |
96 | 96 | ||
97 | parseLispValue :: Parser Expr | 97 | parseLispValue :: Parser Expr |
@@ -103,8 +103,8 @@ parseLispValue = | |||
103 | <|> try parseId | 103 | <|> try parseId |
104 | <|> parseQuote | 104 | <|> parseQuote |
105 | <|> parseQuasiquote | 105 | <|> parseQuasiquote |
106 | <|> try parseUnquoteSplicing | ||
106 | <|> parseUnquote | 107 | <|> parseUnquote |
107 | -- handles lists and dotted lists | ||
108 | <|> do | 108 | <|> do |
109 | char '(' >> optionalWhiteSpace | 109 | char '(' >> optionalWhiteSpace |
110 | x <- sepEndBy parseLispValue whiteSpace | 110 | x <- sepEndBy parseLispValue whiteSpace |
@@ -127,4 +127,3 @@ instance Show Expr where | |||
127 | show (BoolLiteral True) = "#t" | 127 | show (BoolLiteral True) = "#t" |
128 | show (BoolLiteral False) = "#f" | 128 | show (BoolLiteral False) = "#f" |
129 | show (Id i) = i | 129 | show (Id i) = i |
130 | show NoReturn = ";;; environment extension" | ||