on master help sign in
add empty whitespace parser/noop for databaseExpr parser

-this is handy for the tutoriald import which currently works line-by-line

commit79de2e2b4be7af39376e39d8c8ffb0a0a665ef94 authorAgentM <agentm@themactionfaction.com> dateSun 20 Mar 2016, 22:51 (11 years ago) parentad35673
6 files changed+12−4
ProjectM36/Base.hs+1 ProjectM36/RelationalExpression.hs+2 ProjectM36/StaticOptimizer.hs+3−2 TutorialD/Interpreter/DatabaseExpr.hs+4 TutorialD/Interpreter/Import/TutorialD.hs+1−1 TutorialD/Interpreter/RelationalExpr.hs+1−1
ProjectM36/Base.hs+1
@@ -328,6 +328,7 @@ instance Binary InclusionDependency
328328
329329-- | Database context expressions modify the database context.
330330data DatabaseExpr where
331+ NoOperation :: DatabaseExpr
331332 Define :: RelVarName -> [AttributeExpr] -> DatabaseExpr
332333 Undefine :: RelVarName -> DatabaseExpr --forget existence of relvar X
333334 Assign :: RelVarName -> RelationalExpr -> DatabaseExpr
ProjectM36/RelationalExpression.hs+2
@@ -167,6 +167,8 @@ deleteRelVar relVarName = do
167167 return Nothing
168168
169169evalContextExpr :: DatabaseExpr -> DatabaseState (Maybe RelationalError)
170+evalContextExpr NoOperation = pure Nothing
171+
170172evalContextExpr (Define relVarName attrExprs) = do
171173 relvars <- liftM relationVariables get
172174 tConss <- liftM typeConstructorMapping get
ProjectM36/StaticOptimizer.hs+3−2
@@ -91,9 +91,10 @@ applyStaticRelationalOptimization e@(NotEquals _ _) = return $ Right e
9191applyStaticRelationalOptimization e@(Extend _ _) = return $ Right e
9292
9393applyStaticDatabaseOptimization :: DatabaseExpr -> DatabaseState (Either RelationalError DatabaseExpr)
94−applyStaticDatabaseOptimization (Define name attrs) = return $ Right (Define name attrs)
94+applyStaticDatabaseOptimization x@NoOperation = pure $ Right x
95+applyStaticDatabaseOptimization x@(Define _ _) = pure $ Right x
9596
96−applyStaticDatabaseOptimization (Undefine name) = return $ Right (Undefine name)
97+applyStaticDatabaseOptimization x@(Undefine _) = pure $ Right x
9798
9899applyStaticDatabaseOptimization (Assign name expr) = do
99100 optimizedExpr <- applyStaticRelationalOptimization expr
TutorialD/Interpreter/DatabaseExpr.hs+4
@@ -29,6 +29,10 @@ databaseExprP = insertP
2929 <|> removeNotificationP
3030 <|> addTypeConstructorP
3131 <|> removeTypeConstructorP
32+ <|> nothingP
33+
34+nothingP :: Parser DatabaseExpr
35+nothingP = (whiteSpace <* eof) >> pure NoOperation
3236
3337assignP :: Parser DatabaseExpr
3438assignP = do
TutorialD/Interpreter/Import/TutorialD.hs+1−1
@@ -17,7 +17,7 @@ importTutorialD pathIn = do
1717 case tutdData of
1818 Left err -> return $ Left (ImportError $ T.pack (show err))
1919 Right tutdData' -> do
20− let dbexprsErr = map (parse databaseExprP "") (lines tutdData')
20+ let dbexprsErr = map (parse databaseExprP "import") (lines tutdData')
2121 errs = lefts dbexprsErr
2222 case errs of
2323 err2:_ -> return $ Left (ParseError (T.pack (show err2)))
TutorialD/Interpreter/RelationalExpr.hs+1−1
@@ -23,7 +23,7 @@ makeRelationP :: Parser RelationalExpr
2323makeRelationP = do
2424 reserved "relation"
2525 attrExprs <- try (liftA Just makeAttributeExprsP) <|> pure Nothing
26− tupleExprs <- braces (sepBy tupleExprP comma)
26+ tupleExprs <- try (braces (sepBy tupleExprP comma)) <|> pure []
2727 pure $ MakeRelationFromExprs attrExprs tupleExprs
2828
2929--used in relation creation