From a3794ffdf8d59dce1cea7cd44f8d96142045dd36 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sat, 13 Aug 2022 19:46:25 +0200 Subject: Bird combinators --- src/Parser.hs | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'src/Parser.hs') diff --git a/src/Parser.hs b/src/Parser.hs index 44bae87..82fe98b 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -18,15 +18,15 @@ sc :: Parser () sc = void $ char ' ' infixOperator :: Parser String -infixOperator = some $ oneOf "!?*@:+-#$%^&<>/|~=" +infixOperator = some $ oneOf "!?*@.:+-#$%^&<>/|~=" prefixOperator :: Parser String -prefixOperator = some $ oneOf "!?*@:+-#$%^&<>/|~=" +prefixOperator = some $ oneOf "!?*@.:+-#$%^&<>/|~=" -- def identifier disallows the import prefix dots defIdentifier :: Parser String defIdentifier = - ((:) <$> (letterChar <|> char '_') <*> many (alphaNumChar <|> oneOf "?!'_-")) + ((:) <$> (letterChar <|> char '_') <*> many (alphaNumChar <|> oneOf "?!'_-*")) <|> ((\l i r -> [l] ++ i ++ [r]) <$> char '(' <*> infixOperator <*> char ')' ) <|> ((\p i -> p ++ [i]) <$> prefixOperator <*> char '(') @@ -35,7 +35,8 @@ defIdentifier = -- TODO: write as extension to defIdentifier identifier :: Parser String identifier = - ((:) <$> (letterChar <|> char '_') <*> many (alphaNumChar <|> oneOf "?!'_-.")) + ((:) <$> (letterChar <|> char '_') <*> many (alphaNumChar <|> oneOf "?!'_-*.") + ) "identifier" namespace :: Parser String @@ -84,16 +85,20 @@ specialEscape = parseString :: Parser Expression parseString = do - str <- between - (char '\"') - (char '\"') - (some $ (char '\\' *> specialEscape) <|> (satisfy (`notElem` "\"\\"))) - pure (stringToExpression str) "string" + str <- + between + (char '\"') + (char '\"') + (some $ (char '\\' *> specialEscape) <|> (satisfy (`notElem` "\"\\"))) + "quoted string" + pure $ stringToExpression str parseChar :: Parser Expression parseChar = do - ch <- between (char '\'') (char '\'') (satisfy (`notElem` "\"\\")) - pure (charToExpression ch) "char" + ch <- + between (char '\'') (char '\'') (satisfy (`notElem` "\"\\")) + "quoted char" + pure $ charToExpression ch parseVariable :: Parser Expression parseVariable = do -- cgit v1.2.3