setdown-0.1.0.0: SetInput.hs
module SetInput
( parse
) where
import SetData
import qualified Data.ByteString.Lazy as BL
import qualified SetLanguage as SL
import qualified SetParser as SP
parse :: BL.ByteString -> Definitions
parse = fmap fromParserDefinition . SP.parseSetLanguage . SL.alexScanTokens
fromParserDefinition :: SP.Definition -> Definition
fromParserDefinition (SP.Definition (SP.Identifier name) expression) = Definition name (fromParserExpression expression)
fromParserExpression :: SP.Expression -> Expression
fromParserExpression (SP.BinaryExp op a b) = BinaryExpression (fromParserOperator op) (fromParserExpression a) (fromParserExpression b)
fromParserExpression (SP.BrackExp a) = fromParserExpression a
fromParserExpression (SP.FilenameExp filename) = FileExpression filename
fromParserExpression (SP.IdentifierExp (SP.Identifier name)) = IdentifierExpression name
fromParserOperator :: SP.SetOperator -> Operator
fromParserOperator SP.IntersectionOp = And
fromParserOperator SP.UnionOp = Or
fromParserOperator SP.DifferenceOp = Difference