@@ -14,7 +14,7 @@ import qualified Data.Set as S
14import qualified Data.HashSet as HS
14import qualified Data.HashSet as HS
15import qualified Data.Map as M
15import qualified Data.Map as M
16import qualified Data.List as L
16import qualified Data.List as L
17−import Control.Applicative (liftA, (<*))
17+import Control.Applicative (liftA)
18import Control.Monad.State
18import Control.Monad.State
19import System.Console.Readline
19import System.Console.Readline
@@ -89,8 +89,10 @@ projectOp = do
90assignP :: Parser DatabaseExpr
90assignP :: Parser DatabaseExpr
91assignP = do
91assignP = do
92− relVarName <- identifier
92+ relVarName <- try $ do
93+ relVarName <- identifier
93− reservedOp ":="
94+ reservedOp ":="
94 expr <- relExpr
96 expr <- relExpr
95 return $ Assign relVarName expr
97 return $ Assign relVarName expr
@@ -142,8 +144,8 @@ databaseExpr = insertP
142 <|> deleteP
144 <|> deleteP
143 <|> updateP
145 <|> updateP
144 <|> constraintP
146 <|> constraintP
145− <|> try defineP
147+ <|> defineP
146− <|> try assignP
148+ <|> assignP
148multipleDatabaseExpr :: Parser DatabaseExpr
150multipleDatabaseExpr :: Parser DatabaseExpr
149multipleDatabaseExpr = do
151multipleDatabaseExpr = do
@@ -159,8 +161,10 @@ insertP = do
160defineP :: Parser DatabaseExpr
162defineP :: Parser DatabaseExpr
161defineP = do
163defineP = do
162− relVarName <- identifier
164+ relVarName <- try $ do
165+ relVarName <- identifier
163− reservedOp "::"
166+ reservedOp "::"
164 attributes <- makeAttributes
168 attributes <- makeAttributes
165 return $ Define relVarName attributes
169 return $ Define relVarName attributes
@@ -178,6 +182,14 @@ updateP = do
178 attributeAssignments <- liftM M.fromList $ parens (sepBy attributeAssignment comma)
182 attributeAssignments <- liftM M.fromList $ parens (sepBy attributeAssignment comma)
179 return $ Update relVarName attributeAssignments
183 return $ Update relVarName attributeAssignments
186+restrictionPredicateP :: Parser RestrictionPredicateExpr
187+restrictionPredicateP = do
190+ subexpr = try attributeEqP <|>
181constraintP :: Parser DatabaseExpr
193constraintP :: Parser DatabaseExpr
182constraintP = do
194constraintP = do
183 reservedOp "constraint"
195 reservedOp "constraint"