- (Left e) = (Left e, Left "", w)
- (Right cs) = let lexOut = lexer cs in (lexOut, parser lexOut, w)
+ (Left cs) = snd $ fclose (stdin <<< cs) w
+ (Right cs)
+ # lexOut = lexer cs
+ # stdin = if (not args.lex) stdin (case lexOut of
+ (Right toks) =
+ stdin <<< "---LEXER\n" <<< printTokens toks <<< "---LEXER\n"
+ _ = stdin)
+ # parseOut = parser lexOut
+ # stdin = if (not args.parse) stdin (case parser lexOut of
+ (Right ast) =
+ stdin <<< "---PARSER\n" <<< toString ast <<< "---PARSER\n"
+ (Left parse) = stdin <<< toString parse)
+ = snd $ fclose stdin w
+ where
+ printTokens :: [Token] -> String
+ printTokens ts = concat $ flatten $ map pt ts
+ where
+ pt {line,column,token} = [toString line, ":",
+ toString column, ": ", printToString token, "\n"]