@@ -14,7 +14,7 @@ import qualified Data.Set as S
1414import qualified Data.HashSet as HS
1515import qualified Data.Map as M
1616import qualified Data.List as L
17−import Control.Applicative (liftA, (<*))
17+import Control.Applicative (liftA)
1818import Control.Monad.State
1919import System.Console.Readline
2020
@@ -89,8 +89,10 @@ projectOp = do
8989
9090assignP :: Parser DatabaseExpr
9191assignP = do
92− relVarName <- identifier
93− reservedOp ":="
92+ relVarName <- try $ do
93+ relVarName <- identifier
94+ reservedOp ":="
95+ return relVarName
9496 expr <- relExpr
9597 return $ Assign relVarName expr
9698
@@ -142,8 +144,8 @@ databaseExpr = insertP
142144 <|> deleteP
143145 <|> updateP
144146 <|> constraintP
145− <|> try defineP
146− <|> try assignP
147+ <|> defineP
148+ <|> assignP
147149
148150multipleDatabaseExpr :: Parser DatabaseExpr
149151multipleDatabaseExpr = do
@@ -159,8 +161,10 @@ insertP = do
159161
160162defineP :: Parser DatabaseExpr
161163defineP = do
162− relVarName <- identifier
163− reservedOp "::"
164+ relVarName <- try $ do
165+ relVarName <- identifier
166+ reservedOp "::"
167+ return relVarName
164168 attributes <- makeAttributes
165169 return $ Define relVarName attributes
166170
@@ -178,6 +182,14 @@ updateP = do
178182 attributeAssignments <- liftM M.fromList $ parens (sepBy attributeAssignment comma)
179183 return $ Update relVarName attributeAssignments
180184
185+{-
186+restrictionPredicateP :: Parser RestrictionPredicateExpr
187+restrictionPredicateP = do
188+ sepBy1 subexpr (
189+ where
190+ subexpr = try attributeEqP <|>
191+-}
192+
181193constraintP :: Parser DatabaseExpr
182194constraintP = do
183195 reservedOp "constraint"