-module ParsedOFL where
+module HighLevel where
import TargetMapping
import Data.Map as Map (Map, lookup, insertWithKey, empty)
import Data.List (foldl')
-module Main where
+module Main (main) where
import System.Environment (getArgs)
-import Parsing
+import Parser
main :: IO()
main = do
args <- getArgs
- contents <- readFile $ getFileName args
- processOFL contents
+ processFile $ getFileName args
getFileName :: [String] -> String
getFileName [filename] = filename
getFileName _ = error "Usage: ofc input_file"
-processOFL :: String -> IO()
-processOFL input =
- let result = parseAsOFL input in
- case result of
- Left err -> putStrLn $ show err
- Right ofl -> putStrLn $ show ofl
+processFile :: String -> IO()
+processFile filename = do
+ contents <- readFile $ filename
+ let result = runOFLParser contents in
+ case result of
+ Left err -> putStrLn $ show err
+ Right ofl -> putStrLn $ show ofl
-module Parsing where
-import ParsedOFL
+module Parser (runOFLParser) where
+import HighLevel
import TargetMapping
import Data.List (foldl1')
import Text.Parsec
parseBasisProperty = do _ <- lSymbol "basis"; ident <- lParens lIdentifier; return $ PPDBasis ident
parseDataProperty = do _ <- lSymbol "data"; ident <- lParens lIdentifier; return $ PPDData ident
-parseAsOFL inputString = runParser parseOFL emptyOFL "(unknown)" inputString
+runOFLParser :: String -> Either ParseError OFL
+runOFLParser inputString = runParser parseOFL emptyOFL "" inputString