Update demos and adds <|
This commit is contained in:
@@ -45,6 +45,7 @@ tricuLexer = do
|
||||
, closeParen
|
||||
, openBracket
|
||||
, closeBracket
|
||||
, try arrowLeft
|
||||
]
|
||||
|
||||
lexTricu :: String -> [LToken]
|
||||
@@ -128,6 +129,9 @@ openBracket = char '[' $> LOpenBracket
|
||||
closeBracket :: Lexer LToken
|
||||
closeBracket = char ']' $> LCloseBracket
|
||||
|
||||
arrowLeft :: Lexer LToken
|
||||
arrowLeft = string "<|" $> LArrowLeft
|
||||
|
||||
lnewline :: Lexer LToken
|
||||
lnewline = char '\n' $> LNewline
|
||||
|
||||
|
||||
@@ -112,8 +112,8 @@ parseExpressionM = choice
|
||||
, try parseLambdaM
|
||||
, try parseLambdaExpressionM
|
||||
, try parseListLiteralM
|
||||
, try parseApplicationM
|
||||
, try parseTreeTermM
|
||||
, try parseArrowLeftM
|
||||
, parseLiteralM
|
||||
]
|
||||
|
||||
@@ -138,7 +138,7 @@ parseLambdaM = do
|
||||
|
||||
parseLambdaExpressionM :: ParserM TricuAST
|
||||
parseLambdaExpressionM = choice
|
||||
[ try parseLambdaApplicationM
|
||||
[ try parseLambdaArrowLeftM
|
||||
, parseAtomicLambdaM
|
||||
]
|
||||
|
||||
@@ -172,6 +172,34 @@ parseLambdaApplicationM = do
|
||||
pure arg
|
||||
pure $ foldl SApp func args
|
||||
|
||||
parseArrowLeftM :: ParserM TricuAST
|
||||
parseArrowLeftM = do
|
||||
left <- parseApplicationM
|
||||
mArrow <- optional (try $ do
|
||||
scnParserM
|
||||
satisfyM (== LArrowLeft))
|
||||
case mArrow of
|
||||
Nothing -> return left
|
||||
Just _ -> do
|
||||
skipMany (satisfyM (== LNewline))
|
||||
scnParserM
|
||||
right <- parseExpressionM
|
||||
return $ SApp left right
|
||||
|
||||
parseLambdaArrowLeftM :: ParserM TricuAST
|
||||
parseLambdaArrowLeftM = do
|
||||
left <- parseLambdaApplicationM
|
||||
mArrow <- optional (try $ do
|
||||
scnParserM
|
||||
satisfyM (== LArrowLeft))
|
||||
case mArrow of
|
||||
Nothing -> return left
|
||||
Just _ -> do
|
||||
skipMany (satisfyM (== LNewline))
|
||||
scnParserM
|
||||
right <- parseLambdaExpressionM
|
||||
return $ SApp left right
|
||||
|
||||
parseAtomicBaseM :: ParserM TricuAST
|
||||
parseAtomicBaseM = choice
|
||||
[ parseTreeLeafM
|
||||
|
||||
@@ -49,6 +49,7 @@ data LToken
|
||||
| LCloseBracket
|
||||
| LStringLiteral String
|
||||
| LIntegerLiteral Int
|
||||
| LArrowLeft
|
||||
| LNewline
|
||||
deriving (Eq, Show, Ord)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user