- # lexout = lexer cs
- # parsout = parser lexout
- # stdin = stdin <<< (either (const "") toString parsout)
- # (_, w) = fclose stdin w
- = (lexout, parser lexout, w)
+ # 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"]