import Language.Python.Common
import Language.Python.Version2 as V2
import Language.Python.Version3 as V3
import System.Exit
import System.Environment
data PythonVersion = Two | Three
deriving (Eq, Show)
type Lexer = String -> String -> Either ParseError [Token]
main :: IO ()
main = do
args <- getArgs
case args of
(versionStr:inFile:_rest) ->
case parseVersion versionStr of
Nothing -> do
putStrLn $ "Unknown Python version: " ++ versionStr
exitFailure
Just version -> do
contents <- readFile inFile
runLexer inFile (pickLexer version) contents
_other -> putStrLn "Incorrect command line. Expected: <2|3> inputFileName"
pickLexer :: PythonVersion -> Lexer
pickLexer Two = V2.lex
pickLexer Three = V3.lex
parseVersion :: String -> Maybe PythonVersion
parseVersion "2" = Just Two
parseVersion "3" = Just Three
parseVersion _other = Nothing
runLexer :: FilePath -> Lexer -> String -> IO ()
runLexer inFile lex contents = do
case lex contents inFile of
Left e -> print e
Right toks -> putStr $ unlines $ map debugTokenString toks