never executed always true always false
1 module HelVM.HelMA.Automata.LazyK.Parser (
2 parse,
3 ) where
4
5 import HelVM.HelMA.Automata.LazyK.Lambda
6 import HelVM.HelMA.Automata.LazyK.Lexer
7
8 import HelVM.HelMA.Automaton.API.IOTypes
9 import HelVM.HelMA.Automaton.ReadPExtra
10
11 import HelVM.HelIO.Control.Safe
12
13 import Text.ParserCombinators.ReadP hiding (many)
14
15 parse :: MonadSafe m => Source -> m Lambda
16 parse = parseCode . filterComments
17
18 parseCode :: MonadSafe m => Source -> m Lambda
19 parseCode = runParser appParser
20
21 appParser :: ReadP Lambda
22 appParser = foldlLambda <$> manyNonEmpty lambdaParser
23
24 lambdaParser :: ReadP Lambda
25 lambdaParser =
26 S <$ oneOf "sS"
27 <|> K <$ oneOf "kK"
28 <|> I <$ oneOf "iI"
29 <|> App <$ char '`' <*> lambdaParser <*> lambdaParser
30 <|> char '(' *> appParser <* char ')'