Changeset 12725

Show
Ignore:
Timestamp:
26.10.2009 15:58:48 (4 weeks ago)
Author:
maeder
Message:

hlinted

Location:
trunk
Files:
12 modified

Legend:

Unmodified
Added
Removed
  • trunk/CASL/Formula.hs

    r12184 r12725  
    8080restTerms :: AParsable f => [String] -> AParser st [TERM f] 
    8181restTerms k = (tryItemEnd startKeyword >> return []) 
    82   <|> bind (:) (restTerm k) (restTerms k) 
     82  <|> restTerm k <:> restTerms k 
    8383  <|> return [] 
    8484 
  • trunk/CASL/Parse_AS_Basic.hs

    r10313 r12725  
    2626import Common.Keywords 
    2727import Common.Lexer 
     28import Common.AS_Annotation 
     29 
    2830import CASL.AS_Basic_CASL 
    29 import Common.AS_Annotation 
    30 import Text.ParserCombinators.Parsec 
    3131import CASL.Formula 
    3232import CASL.SortItem 
    3333import CASL.OpItem 
     34 
     35import Text.ParserCombinators.Parsec 
     36 
     37import Control.Monad 
    3438 
    3539-- * signature items 
     
    117121 
    118122aFormula  :: AParsable f => [String] -> AParser st (Annoted (FORMULA f)) 
    119 aFormula ks = bind appendAnno (annoParser $ formula ks) lineAnnos 
     123aFormula = allAnnoParser . formula 
    120124 
    121125-- * basic spec 
     
    123127basicSpec :: (AParsable f, AParsable s, AParsable b) => 
    124128             [String] -> AParser st (BASIC_SPEC b s f) 
    125 basicSpec ks = fmap Basic_spec $ annosParser $ basicItems ks 
     129basicSpec = fmap Basic_spec . annosParser . basicItems 
  • trunk/Common/AnnoState.hs

    r11694 r12725  
    2626import Common.AS_Annotation 
    2727import Common.AnnoParser 
     28 
    2829import Text.ParserCombinators.Parsec 
    29 import Data.List(delete) 
     30 
     31import Data.List 
     32import Control.Monad 
    3033 
    3134-- | parsers that can collect annotations via side effects 
    32 type AParser st a = GenParser Char (AnnoState st) a 
     35type AParser st = GenParser Char (AnnoState st) 
    3336 
    3437class AParsable a where 
     
    99102-- | optional semicolon followed by annotations on consecutive lines 
    100103optSemi :: AParser st ([Token], [Annotation]) 
    101 optSemi = do (a1, s) <- try $ bind (,) annos semiT 
     104optSemi = do (a1, s) <- try $ pair annos semiT 
    102105             a2 <- lineAnnos 
    103106             return ([s], a1 ++ a2) 
     
    111114    (single (oneOf "\"([{") <|> placeS <|> scanAnySigns 
    112115     <|> many (scanLPD <|> char '_' <?> "") <?> "") 
    113   if null c || c `elem` l then return () else pzero 
     116  unless (null c || elem c l) pzero 
    114117 
    115118-- | keywords that indicate a new item for 'tryItemEnd'. 
     
    120123-- | parse preceding annotations and the following item 
    121124annoParser :: AParser st a -> AParser st (Annoted a) 
    122 annoParser = bind addLeftAnno annos 
     125annoParser = liftM2 addLeftAnno annos 
     126 
     127allAnnoParser :: AParser st a -> AParser st (Annoted a) 
     128allAnnoParser p = liftM2 appendAnno (annoParser p) lineAnnos 
    123129 
    124130{- | parse preceding and consecutive trailing annotations of an item in 
     
    127133trailingAnnosParser :: AParser st a -> AParser st [Annoted a] 
    128134trailingAnnosParser p = do 
    129   l <- many1 $ bind appendAnno (annoParser p) lineAnnos 
     135  l <- many1 $ allAnnoParser p 
    130136  a <- annos -- append remaining annos to last item 
    131137  return $ init l ++ [appendAnno (last l) a] 
     
    135141annosParser parser = 
    136142    do a <- annos 
    137        l <- many1 $ bind (,) parser annos 
     143       l <- many1 $ pair parser annos 
    138144       let ps = map fst l 
    139145           as = map snd l 
     
    147153itemList ks kw ip constr = 
    148154    do p <- pluralKeyword kw 
    149        auxItemList (ks++startKeyword) [p] (ip ks) constr 
     155       auxItemList (ks ++ startKeyword) [p] (ip ks) constr 
    150156 
    151157-- | generalized version of 'itemList' 
  • trunk/Common/Lexer.hs

    r11206 r12725  
    1818import Text.ParserCombinators.Parsec 
    1919import qualified Text.ParserCombinators.Parsec.Pos as Pos 
     20 
     21import Control.Monad 
    2022import Data.Char (digitToInt, isDigit, ord) 
    2123import Data.List (isPrefixOf) 
     
    4244caslLetters ch = let c = ord ch in 
    4345   if c <= 122 && c >= 65 then  c >= 97 || c <= 90 
    44    else c >= 192 && c <= 255 && not (elem c [215, 247]) 
     46   else c >= 192 && c <= 255 && notElem c [215, 247] 
    4547 
    4648-- ['A'..'Z'] ++ ['a'..'z'] ++ 
     
    6163-- * Monad and Functor extensions 
    6264 
    63 bind :: (Monad m) => (a -> b -> c) -> m a -> m b -> m c 
    64 bind f p q = do { x <- p; y <- q; return (f x y) } 
    65  
    6665infixl << 
    6766 
    68 (<<) :: (Monad m) => m a -> m b -> m a 
    69 (<<) = bind const 
     67(<<) :: Monad m => m a -> m b -> m a 
     68(<<) = liftM2 const 
    7069 
    7170infixr 5 <:> 
    7271 
    73 (<:>) :: (Monad m) => m a -> m [a] -> m [a] 
    74 (<:>) = bind (:) 
     72(<:>) :: Monad m => m a -> m [a] -> m [a] 
     73(<:>) = liftM2 (:) 
    7574 
    7675infixr 5 <++> 
    7776 
    78 (<++>) :: (Monad m) => m [a] -> m [a] -> m [a] 
    79 (<++>) = bind (++) 
     77(<++>) :: Monad m => m [a] -> m [a] -> m [a] 
     78(<++>) = liftM2 (++) 
     79 
     80pair :: Monad m => m a -> m b -> m (a, b) 
     81pair = liftM2 (,) 
    8082 
    8183-- Functor extension 
     
    8385single = fmap return 
    8486 
    85 flat :: (Functor f) => f [[a]] -> f [a] 
     87flat :: Functor f => f [[a]] -> f [a] 
    8688flat = fmap concat 
    8789 
     
    273275      skip 
    274276      q <- getPosition 
    275       if Pos.sourceLine q <= Pos.sourceLine p + 1 
    276         then return () 
    277         else notFollowedBy (char '%') >> return ()) 
     277      unless (Pos.sourceLine q <= Pos.sourceLine p + 1) 
     278        $ notFollowedBy (char '%') >> return ()) 
    278279    <|> return () 
    279280 
     
    281282 
    282283keyWord :: CharParser st a -> CharParser st a 
    283 keyWord p = try(p << notFollowedBy (scanLPD <|> singleUnderline)) 
     284keyWord = try . (<< notFollowedBy (scanLPD <|> singleUnderline)) 
    284285 
    285286keySign :: CharParser st a -> CharParser st a 
    286 keySign p = try(p << notFollowedBy (oneOf signChars)) 
     287keySign = try . (<< notFollowedBy (oneOf signChars)) 
    287288 
    288289reserved :: [String] -> CharParser st String -> CharParser st String 
     
    293294 
    294295pToken :: CharParser st String -> CharParser st Token 
    295 pToken parser = 
    296   bind (\ p s -> Token s $ Range [p]) getPos (parser << skipSmart) 
     296pToken = liftM2 (\ p s -> Token s $ Range [p]) getPos . (<< skipSmart) 
    297297 
    298298pluralKeyword :: String -> CharParser st Token 
     
    355355notFollowedWith :: GenParser tok st a -> GenParser tok st b 
    356356                -> GenParser tok st a 
    357 notFollowedWith p1 p2 = try $ do 
    358   pp <- (try (p1 >> p2) >> return pzero) <|> return p1 
    359   pp 
     357notFollowedWith p1 p2 = 
     358  try $ join $ (try (p1 >> p2) >> return pzero) <|> return p1 
    360359-- see http://www.mail-archive.com/haskell@haskell.org/msg14388.html 
    361360-- by Andrew Pimlott 
  • trunk/HasCASL/ParseItem.hs

    r11877 r12725  
    2828import HasCASL.ParseTerm 
    2929 
     30import Control.Monad 
     31 
    3032-- * adapted item list parser (using 'itemAux') 
    3133 
     
    3840hasCaslItemAux :: [Token] -> AParser st b -> ([Annoted b] -> Range -> a) 
    3941               -> AParser st a 
    40 hasCaslItemAux ps = auxItemList hasCaslStartKeywords ps 
     42hasCaslItemAux = auxItemList hasCaslStartKeywords 
    4143 
    4244-- * parsing type items 
     
    118120 
    119121typeItemList :: [Token] -> Instance -> AParser st SigItems 
    120 typeItemList ps k = hasCaslItemAux ps typeItem $ TypeItems k 
     122typeItemList ps = hasCaslItemAux ps typeItem . TypeItems 
    121123 
    122124typeItems :: AParser st SigItems 
     
    184186    c <- asKey defnS 
    185187    a <- annos 
    186     let aAlternative = bind (\ i an -> Annoted i nullRange [] an) 
     188    let aAlternative = liftM2 (\ i -> Annoted i nullRange []) 
    187189          alternative annos 
    188190    (Annoted v _ _ b : as, ps) <- aAlternative `separatedBy` barT 
     
    214216classDecl = do 
    215217    (is, cs) <- classId `separatedBy` anComma 
    216     (ps, k) <- option ([], universe) $ bind  (,) (single lessT) kind 
     218    (ps, k) <- option ([], universe) $ liftM2  (,) (single lessT) kind 
    217219    return $ ClassDecl is k $ catRange $ cs ++ ps 
    218220 
     
    227229 
    228230classItemList :: [Token] -> Instance -> AParser st BasicItem 
    229 classItemList ps k = hasCaslItemAux ps classItem $ ClassItems k 
     231classItemList ps = hasCaslItemAux ps classItem . ClassItems 
    230232 
    231233classItems :: AParser st BasicItem 
     
    395397dotFormulae = do 
    396398    d <- dotT 
    397     let aFormula = bind appendAnno (annoParser term) lineAnnos 
    398     (fs, ds) <- aFormula `separatedBy` dotT 
     399    (fs, ds) <- allAnnoParser term `separatedBy` dotT 
    399400    let ps = catRange $ d : ds 
    400401        lst = last fs 
  • trunk/HasCASL/ParseTerm.hs

    r10656 r12725  
    2222import HasCASL.As 
    2323import HasCASL.AsUtils 
     24 
    2425import Text.ParserCombinators.Parsec 
     26 
     27import Control.Monad 
     28 
    2529import Data.List ((\\)) 
    2630import qualified Data.Set as Set 
     31 
    2732 
    2833-- * key sign tokens 
     
    4550-- | parser for square brackets 
    4651mkBrackets :: AParser st a -> ([a] -> Range -> b) -> AParser st b 
    47 mkBrackets p c = bracketParser p oBracketT cBracketT anComma c 
     52mkBrackets p = bracketParser p oBracketT cBracketT anComma 
    4853 
    4954-- | parser for braces 
    5055mkBraces :: AParser st a -> ([a] -> Range -> b) -> AParser st b 
    51 mkBraces p c = bracketParser p oBraceT cBraceT anComma c 
     56mkBraces p = bracketParser p oBraceT cBraceT anComma 
    5257 
    5358-- * kinds 
     
    6368-- | do 'parseSimpleKind' and check for an optional 'Variance' 
    6469parseExtKind :: AParser st (Variance, Kind) 
    65 parseExtKind = bind (,) variance parseSimpleKind 
     70parseExtKind = pair variance parseSimpleKind 
    6671 
    6772-- | parse a (right associative) function kind for a given argument kind 
     
    96101-- a (simple) type variable with a 'Variance' 
    97102extVar :: AParser st Id -> AParser st (Id, Variance) 
    98 extVar vp = bind (,) vp variance 
     103extVar vp = pair vp variance 
    99104 
    100105-- several 'extVar' with a 'Kind' 
     
    333338-- | attach the 'Type' to every 'Var' 
    334339makeVarDecls :: [Id] -> [Token] -> Type -> Range -> [VarDecl] 
    335 makeVarDecls vs ps t q = zipWith ( \ v p -> VarDecl v t Comma $ tokPos p) 
     340makeVarDecls vs ps t q = zipWith ( \ v -> VarDecl v t Comma . tokPos) 
    336341    (init vs) ps ++ [VarDecl (last vs) t Other q] 
    337342 
     
    347352    let other = fmap (map GenTypeVarDecl) (typeKind True vs ps) 
    348353    if allIsNonVar vs then fmap (map GenVarDecl) 
    349         (varDeclType (map ( \ (i, _) -> i) vs) ps) <|> other 
     354        (varDeclType (map fst vs) ps) <|> other 
    350355      else other 
    351356 
     
    414419lamPattern :: AParser st [Term] 
    415420lamPattern = 
    416     (lookAhead lamDot >> return []) <|> bind (:) (typedPattern []) lamPattern 
     421    (lookAhead lamDot >> return []) <|> typedPattern [] <:> lamPattern 
    417422 
    418423-- * terms 
     
    497502-- | 'opS' or 'functS' 
    498503opBrand :: AParser st (Token, OpBrand) 
    499 opBrand = bind (,) (asKey opS) (return Op) 
    500     <|> bind (,) (asKey functS) (return Fun) 
     504opBrand = pair (asKey opS) (return Op) 
     505    <|> pair (asKey functS) (return Fun) 
    501506 
    502507parsePolyId :: AParser st PolyId 
     
    573578-- | a 'Universal', 'Unique' or 'Existential' 'QuantifiedTerm' 
    574579exQuant :: AParser st (Token, Quantifier) 
    575 exQuant = choice $ map (\ (v, s) -> bind (,) (asKey s) $ return v) 
     580exQuant = choice $ map (\ (v, s) -> pair (asKey s) $ return v) 
    576581  [ (Universal, forallS) 
    577582  , (Unique, existsS ++ exMark) 
  • trunk/Isabelle/IsaParse.hs

    r10689 r12725  
    2121    , compatibleBodies) where 
    2222 
     23import Isabelle.IsaConsts 
     24 
     25import Common.DocUtils 
     26import Common.Id 
     27import Common.Lexer 
     28import Common.Result 
     29 
     30import Text.ParserCombinators.Parsec 
     31 
     32import Control.Monad 
     33 
    2334import Data.List 
    24 import Common.Lexer 
    25 import Text.ParserCombinators.Parsec 
    2635import qualified Data.Map as Map 
    27 import Isabelle.IsaConsts 
    28 import Common.Id 
    29 import Common.Result 
    30 import Common.DocUtils 
    3136 
    3237latin :: Parser String 
     
    102107 
    103108lexP :: Parser String -> Parser Token 
    104 lexP pa = bind (\ p s -> Token s (Range [p])) getPos $ pa << isaSkip 
     109lexP = liftM2 (\ p s -> Token s (Range [p])) getPos . (<< isaSkip) 
    105110 
    106111lexS :: String -> Parser String 
     
    140145 
    141146commalist :: Parser a -> Parser [a] 
    142 commalist p = fmap fst $ p `separatedBy` lexS "," 
     147commalist = fmap fst . flip separatedBy (lexS ",") 
    143148 
    144149parensP :: Parser a -> Parser a 
     
    206211attributes :: Parser [Bool] 
    207212attributes = bracketsP . commalist $ 
    208              bind (\ n l -> null l && show n == simpS) namerefP args 
     213             liftM2 (\ n l -> null l && show n == simpS) namerefP args 
    209214 
    210215lessOrEq :: Parser String 
     
    251256 
    252257consts :: Parser [Const] 
    253 consts = lexS constsS >> many1 (bind Const nameP (typeSuffix 
     258consts = lexS constsS >> many1 (liftM2 Const nameP (typeSuffix 
    254259                                          << option () mixfix)) 
    255260 
     
    288293 
    289294axmdecl :: Parser SenDecl 
    290 axmdecl = (bind SenDecl nameP optAttributes) << lexS ":" 
     295axmdecl = liftM2 SenDecl nameP optAttributes << lexS ":" 
    291296 
    292297prop :: Parser Token 
     
    296301 
    297302axiomsP :: Parser [Axiom] 
    298 axiomsP = many1 (bind Axiom axmdecl prop) 
     303axiomsP = many1 (liftM2 Axiom axmdecl prop) 
    299304 
    300305defs :: Parser [Axiom] 
     
    306311 
    307312thmbind :: Parser SenDecl 
    308 thmbind = (bind SenDecl nameP optAttributes) 
     313thmbind = liftM2 SenDecl nameP optAttributes 
    309314          <|> (attributes >> return emptySen) 
    310315 
     
    337342 
    338343props :: Parser Goal 
    339 props = bind Goal (option (emptySen) thmdecl) 
     344props = liftM2 Goal (option emptySen thmdecl) 
    340345        $ many1 (prop << option () proppat) 
    341346 
     
    358363 
    359364cons :: Parser [Token] 
    360 cons = bind (:) nameP (many typeP) << option () mixfix 
     365cons = nameP <:> many typeP << option () mixfix 
    361366 
    362367data Dtspec = Dtspec Typespec [[Token]] 
     
    436441addAxiom :: Axiom -> Map.Map Token (SimpValue Token) 
    437442         -> Map.Map Token (SimpValue Token) 
    438 addAxiom (Axiom (SenDecl n b) a) m = Map.insert n (SimpValue b a) m 
     443addAxiom (Axiom (SenDecl n b) a) = Map.insert n (SimpValue b a) 
    439444 
    440445addGoal :: Goal -> Map.Map Token (SimpValue [Token]) 
    441446        -> Map.Map Token (SimpValue [Token]) 
    442 addGoal (Goal (SenDecl n b) a) m = Map.insert n (SimpValue b a) m 
     447addGoal (Goal (SenDecl n b) a) = Map.insert n (SimpValue b a) 
    443448 
    444449addConst :: Const -> Map.Map Token Token -> Map.Map Token Token 
    445 addConst (Const n a) m = Map.insert n a m 
     450addConst (Const n a) = Map.insert n a 
    446451 
    447452addDatatype :: Dtspec -> Map.Map Token ([Token], [[Token]]) 
    448453            -> Map.Map Token ([Token], [[Token]]) 
    449 addDatatype (Dtspec (Typespec n ps) a) m = Map.insert n (ps, a) m 
     454addDatatype (Dtspec (Typespec n ps) a) = Map.insert n (ps, a) 
    450455 
    451456emptyBody :: Body 
     
    467472-- | parses a complete isabelle theory file, but skips i.e. proofs 
    468473parseTheory :: Parser (TheoryHead, Body) 
    469 parseTheory = bind (,) 
     474parseTheory = pair 
    470475    theoryHead (fmap (foldr concatBodyElems emptyBody) theoryBody) 
    471476    << lexS endS << eof 
     
    481486 
    482487warnSimpAttr :: Body -> [Diagnosis] 
    483 warnSimpAttr b = 
     488warnSimpAttr = 
    484489    map ( \ a -> Diag Warning 
    485490         ("use 'declare " ++ tokStr a 
    486491          ++ " [simp]' for proper Isabelle proof details") $ tokPos a) 
    487         $ Map.keys . Map.filter hasSimp $ axiomsF b 
     492        . Map.keys . Map.filter hasSimp . axiomsF 
    488493 
    489494diffMap :: (Ord a, Pretty a, GetRange a, Eq b, Show b) 
     
    505510                   LT -> True 
    506511             kd = if b then kd12 else kd21 
    507                in map ( \ k -> mkDiag Error 
    508                     (msg ++ " entry illegally " ++ 
    509                          if b then "added" else "deleted") k) kd 
     512               in map (mkDiag Error 
     513                      $ msg ++ " entry illegally " ++ 
     514                         if b then "added" else "deleted") kd 
  • trunk/Propositional/Parse_AS_Basic.hs

    r11682 r12725  
    3030import Common.Keywords as Keywords 
    3131import Common.Lexer as Lexer 
     32 
    3233import Propositional.AS_BASIC_Propositional as AS_BASIC 
    33 import qualified Common.AS_Annotation as AS_Anno 
    3434import Text.ParserCombinators.Parsec 
     35 
     36import Control.Monad 
    3537 
    3638propKeywords :: [String] 
     
    6264       (_, an) <- AnnoState.optSemi 
    6365       let _  = Id.catRange (d:ds) 
    64            ns = init fs ++ [AS_Anno.appendAnno (last fs) an] 
     66           ns = init fs ++ [Annotation.appendAnno (last fs) an] 
    6567       return $ AS_BASIC.Axiom_items ns 
    6668 
     
    164166 
    165167-- | Toplevel parser for formulae 
    166 aFormula :: AnnoState.AParser st (AS_Anno.Annoted AS_BASIC.FORMULA) 
    167 aFormula = Lexer.bind AS_Anno.appendAnno (AnnoState.annoParser impFormula) 
    168   AnnoState.lineAnnos 
     168aFormula :: AnnoState.AParser st (Annotation.Annoted AS_BASIC.FORMULA) 
     169aFormula =  AnnoState.allAnnoParser impFormula 
    169170 
    170171-- | parsing a prop symbol 
  • trunk/SoftFOL/DFGParser.hs

    r10322 r12725  
    2222import qualified Data.Map as Map 
    2323import Data.Char (isSpace) 
     24import Data.Maybe 
     25import Control.Monad 
    2426 
    2527-- * lexical matter 
     
    4345 
    4446identifierT :: Parser Token 
    45 identifierT = bind (\ p s -> Token s (Range [p])) getPos identifierS 
     47identifierT = liftM2 (\ p s -> Token s (Range [p])) getPos identifierS 
    4648 
    4749arityT :: Parser Int 
     
    8183squaresDot p = symbolT "[" >> p << symbolT "]." 
    8284 
    83 text :: Parser [Char] 
     85text :: Parser String 
    8486text = fmap (reverse . dropWhile isSpace . reverse) $ 
    85     symbolT "{*" >> (manyTill anyChar $ symbolT "*}") 
    86  
    87 list_of ::  [Char] -> Parser String 
    88 list_of sort = symbolT $ "list_of_" ++ sort 
    89  
    90 list_of_dot :: [Char] -> Parser String 
    91 list_of_dot sort = list_of (sort ++ ".") 
    92  
    93 end_of_list :: Parser String 
    94 end_of_list = symbolT "end_of_list." 
     87    symbolT "{*" >> manyTill anyChar (symbolT "*}") 
     88 
     89listOf :: String -> Parser String 
     90listOf = symbolT . ("list_of_" ++) 
     91 
     92listOfDot :: String -> Parser String 
     93listOfDot = listOf . (++ ".") 
     94 
     95endOfList :: Parser String 
     96endOfList = symbolT "end_of_list." 
    9597 
    9698mapTokensToData :: [(String, a)] -> Parser a 
     
    113115    symbolT "begin_problem" 
    114116    i  <- parensDot identifierS 
    115     dl <- description_list 
    116     lp <- logical_part 
    117     s  <- setting_list 
     117    dl <- descriptionList 
     118    lp <- logicalPartP 
     119    s  <- settingList 
    118120    symbolT "end_problem." 
    119121    many anyChar 
     
    130132  at least a 'name', the name of the 'author', the 'status' (see also 
    131133  'SPLogState' below), and a (verbose) description. -} 
    132 description_list :: Parser SPDescription 
    133 description_list = do 
    134     list_of_dot "descriptions" 
     134descriptionList :: Parser SPDescription 
     135descriptionList = do 
     136    listOfDot "descriptions" 
    135137    keywordT "name" 
    136138    n <- parensDot text 
     
    146148    de <- parensDot text 
    147149    da <- maybeParser (keywordT "date" >> parensDot text) 
    148     end_of_list 
     150    endOfList 
    149151    return SPDescription 
    150152      { name = n 
     
    163165  been implemented yet. 
    164166-} 
    165 logical_part :: Parser SPLogicalPart 
    166 logical_part = do 
    167     sl <- maybeParser symbol_list 
    168     dl <- maybeParser declaration_list 
    169     fs <- many formula_list 
    170     cl <- many clause_list 
    171     pl <- many proof_list 
     167logicalPartP :: Parser SPLogicalPart 
     168logicalPartP = do 
     169    sl <- maybeParser symbolListP 
     170    dl <- maybeParser declarationListP 
     171    fs <- many formulaList 
     172    cl <- many clauseList 
     173    pl <- many proofList 
    172174    return SPLogicalPart 
    173175      { symbolList = sl 
     
    182184  SPASS Symbol List 
    183185-} 
    184 symbol_list :: Parser SPSymbolList 
    185 symbol_list = do 
    186     list_of_dot "symbols" 
     186symbolListP :: Parser SPSymbolList 
     187symbolListP = do 
     188    listOfDot "symbols" 
    187189    fs <- option [] (signSymFor "functions") 
    188190    ps <- option [] (signSymFor "predicates") 
    189191    ss <- option [] sortSymFor 
    190     end_of_list 
     192    endOfList 
    191193    return emptySymbolList 
    192194      { functions = fs 
     
    209211    return SPSignSym {sym = s, arity = a} 
    210212 
    211 func_list :: Parser [SPIdentifier] 
    212 func_list = squaresDot $ commaSep identifierT 
     213functList :: Parser [SPIdentifier] 
     214functList = squaresDot $ commaSep identifierT 
    213215 
    214216-- *** Formula List 
     
    217219  SPASS Formula List 
    218220-} 
    219 formula_list :: Parser SPFormulaList 
    220 formula_list = do 
    221     list_of "formulae" 
     221formulaList :: Parser SPFormulaList 
     222formulaList = do 
     223    listOf "formulae" 
    222224    ot <- parensDot $ mapTokensToData 
    223225      [ ("axioms", SPOriginAxioms) 
    224226      , ("conjectures", SPOriginConjectures)] 
    225227    fs <- many (formula (case ot of {SPOriginAxioms -> True; _ -> False})) 
    226     end_of_list 
     228    endOfList 
    227229    return SPFormulaList { originType = ot, formulae = fs } 
    228230 
    229 clause_list :: Parser SPClauseList 
    230 clause_list = do 
    231     list_of "clauses" 
     231clauseList :: Parser SPClauseList 
     232clauseList = do 
     233    listOf "clauses" 
    232234    (ot, ct) <- parensDot $ do 
    233235        ot <- mapTokensToData 
     
    240242      SPOriginAxioms -> True 
    241243      _ -> False 
    242     end_of_list 
     244    endOfList 
    243245    return SPClauseList 
    244246      { coriginType = ot 
     
    254256clauseFork :: SPClauseType -> Parser NSPClause 
    255257clauseFork ct = do 
    256   termWsList1@(TWL ls b) <- term_ws_list 
     258  termWsList1@(TWL ls b) <- termWsList 
    257259  do  symbolT "||" 
    258       termWsList2 <- term_ws_list 
     260      termWsList2 <- termWsList 
    259261      symbolT "->" 
    260       termWsList3 <- term_ws_list 
     262      termWsList3 <- termWsList 
    261263      return (BriefClause termWsList1 termWsList2 termWsList3) 
    262264    <|> case ls of 
     
    274276        return $ SimpleClause b 
    275277 
    276 term_ws_list :: Parser TermWsList 
    277 term_ws_list = do 
     278termWsList :: Parser TermWsList 
     279termWsList = do 
    278280    twl <- many term 
    279281    p <- maybeParser (symbolT "+") 
    280     return (TWL twl (maybe False (const True) p)) 
     282    return $ TWL twl $ isJust p 
    281283 
    282284formula :: Bool -> Parser (Named SoftFOL.Sign.SPTerm) 
     
    286288     return (makeNamed fname sen) { isAxiom = bool }) 
    287289 
    288 declaration_list :: Parser [SPDeclaration] 
    289 declaration_list = do 
    290     list_of_dot "declarations" 
     290declarationListP :: Parser [SPDeclaration] 
     291declarationListP = do 
     292    listOfDot "declarations" 
    291293    decl <- many declaration 
    292     end_of_list 
     294    endOfList 
    293295    return decl 
    294296 
     
    299301    maybeFreely <- option False (keywordT "freely" >> return True) 
    300302    keywordT "generated by" 
    301     funList <- func_list 
     303    funList <- functList 
    302304    return SPGenDecl 
    303305      { sortSym = sortName 
     
    317319        pn <- identifierT 
    318320        comma 
    319         sl <- commaSep $ identifierT 
     321        sl <- commaSep identifierT 
    320322        return (pn, sl) 
    321323    return SPPredDecl { predSym  = pn, sortSyms = sl } 
     
    329331 
    330332-- | SPASS Proof List 
    331 proof_list :: Parser SPProofList 
    332 proof_list = do 
    333     list_of "proof" 
     333proofList :: Parser SPProofList 
     334proofList = do 
     335    listOf "proof" 
    334336    pa <- maybeParser $ parensDot $ do 
    335337        pt <- maybeParser getproofType 
    336         assocList <- option Map.empty (comma >> assoc_list) 
    337         return (pt, assocList) 
    338     steps <- many proof_step 
    339     end_of_list 
     338        assList <- option Map.empty (comma >> assocList) 
     339        return (pt, assList) 
     340    steps <- many proofStep 
     341    endOfList 
    340342    return $ case pa of 
    341343      Nothing -> SPProofList 
     
    351353getproofType = identifierT 
    352354 
    353 assoc_list :: Parser SPAssocList 
    354 assoc_list = fmap Map.fromList $ squares ( commaSep $ takeTroop ) 
    355     where takeTroop = do 
    356             key <- getKey 
    357             symbolT ":" 
    358             val <- getValue 
    359             return (key, val) 
     355assocList :: Parser SPAssocList 
     356assocList = fmap Map.fromList $ squares $ commaSep 
     357  $ pair getKey $ symbolT ":" >> getValue 
    360358 
    361359getKey :: Parser SPKey 
     
    365363getValue = fmap PValTerm term 
    366364 
    367 proof_step :: Parser SPProofStep 
    368 proof_step = do 
     365proofStep :: Parser SPProofStep 
     366proofStep = do 
    369367    keywordT "step" 
    370368    (ref, res, rule, pl, mal) <- parensDot takeStep 
     
    383381          comma 
    384382          pl <- getParentList 
    385           mal <- option Map.empty (comma >> assoc_list) 
     383          mal <- option Map.empty (comma >> assocList) 
    386384          return (ref, res, rule, pl, mal) 
    387385 
     
    409407              Nothing -> r 
    410408            _ -> r 
    411         getParentList = squares (commaSep $ getParent) 
     409        getParentList = squares $ commaSep getParent 
    412410        getParent = fmap PParTerm term 
    413411 
    414412-- SPASS Settings. 
    415 setting_list :: Parser [SPSetting] 
    416 setting_list  = many setting 
     413settingList :: Parser [SPSetting] 
     414settingList  = many setting 
    417415 
    418416setting :: Parser SPSetting 
    419417setting = do 
    420     list_of_dot "general_settings" 
    421     entriesList <- many setting_entry 
    422     end_of_list 
     418    listOfDot "general_settings" 
     419    entriesList <- many settingEntry 
     420    endOfList 
    423421    return SPGeneralSettings {entries = entriesList} 
    424422  <|> do 
    425     list_of "settings" 
     423    listOf "settings" 
    426424    slabel <- parensDot getLabel 
    427425    symbolT "{*" 
    428426    t <- many clauseFormulaRelation 
    429427    symbolT "*}" 
    430     end_of_list 
     428    endOfList 
    431429    return SPSettings {settingName = slabel, settingBody = t} 
    432430 
    433 setting_entry :: Parser SPHypothesis 
    434 setting_entry = do 
     431settingEntry :: Parser SPHypothesis 
     432settingEntry = do 
    435433    keywordT "hypothesis" 
    436434    slabels <- squaresDot (commaSep identifierT) 
  • trunk/SoftFOL/ParseTPTP.hs

    r11854 r12725  
    1717import Text.ParserCombinators.Parsec 
    1818import SoftFOL.Sign 
     19import SoftFOL.PrintTPTP 
     20 
     21import qualified Common.Doc as Doc 
    1922import Common.Id 
    20 import Common.Lexer ((<<), bind, getPos) 
     23import Common.Lexer ((<<), getPos) 
     24 
     25import Control.Monad 
    2126import Data.Char (ord, toLower, isAlphaNum) 
    22 import qualified Common.Doc as Doc 
    23 import SoftFOL.PrintTPTP 
     27 
    2428 
    2529data TPTP = 
     
    105109 
    106110blank :: Parser p -> Parser () 
    107 blank p = p >> skipMany1 whiteSpace 
     111blank = (>> skipMany1 whiteSpace) 
    108112 
    109113szsOutput :: Parser () 
     
    145149 
    146150lexeme :: Parser a -> Parser a 
    147 lexeme p = p << skipAll 
     151lexeme = (<< skipAll) 
    148152 
    149153key :: Parser a -> Parser () 
    150 key p = p >> skipAll 
     154key = (>> skipAll) 
    151155 
    152156comma :: Parser () 
     
    292296 
    293297pToken :: Parser String -> Parser Token 
    294 pToken parser = 
    295   bind (\ p s -> Token s (Range [p])) getPos (parser << skipAll) 
     298pToken = liftM2 (\ p s -> Token s (Range [p])) getPos . (<< skipAll) 
    296299 
    297300form :: Parser SPTerm 
  • trunk/Syntax/Parse_AS_Architecture.hs

    r10299 r12725  
    2020 
    2121import Logic.Grothendieck(LogicGraph) 
     22 
    2223import Syntax.AS_Structured 
    2324import Syntax.AS_Architecture 
    2425import Syntax.Parse_AS_Structured 
    25     (annoParser2, groupSpec, parseMapping, translation_list) 
     26    (annoParser2, groupSpec, parseMapping, translationList) 
     27 
    2628import Common.AS_Annotation 
    2729import Common.AnnoState 
     30import Common.Id 
    2831import Common.Keywords 
    2932import Common.Lexer 
    3033import Common.Token 
     34 
    3135import Text.ParserCombinators.Parsec 
    32 import Common.Id 
    3336 
    3437------------------------------------------------------------------------ 
     
    3740-- | Parse annotated architectural specification 
    3841annotedArchSpec :: LogicGraph -> AParser st (Annoted ARCH_SPEC) 
    39 annotedArchSpec l = annoParser2 (archSpec l) 
     42annotedArchSpec = annoParser2 . archSpec 
    4043 
    4144-- | Parse architectural specification 
     
    4447-- @ 
    4548archSpec :: LogicGraph -> AParser st (Annoted ARCH_SPEC) 
    46 archSpec l = 
    47     do asp <- basicArchSpec l 
    48        return asp 
    49     <|> 
    50     do asp <- groupArchSpec l 
    51        return asp 
     49archSpec l = basicArchSpec l <|> groupArchSpec l 
    5250 
    5351-- | Parse group architectural specification 
     
    5654-- @ 
    5755groupArchSpec :: LogicGraph -> AParser st (Annoted ARCH_SPEC) 
    58 groupArchSpec l = 
    59     do kOpBr <- oBraceT 
    60        asp <- annoParser $ archSpec l 
    61        kClBr <- cBraceT 
    62        return (replaceAnnoted 
    63                (Group_arch_spec (item asp) $ toRange kOpBr [] kClBr) asp) 
    64     <|> 
    65     do name <- simpleId 
    66        return (emptyAnno $ Arch_spec_name name) 
     56groupArchSpec l = do 
     57    kOpBr <- oBraceT 
     58    asp <- annoParser $ archSpec l 
     59    kClBr <- cBraceT 
     60    return $ replaceAnnoted 
     61      (Group_arch_spec (item asp) $ toRange kOpBr [] kClBr) asp 
     62  <|> fmap (emptyAnno . Arch_spec_name) simpleId 
    6763 
    6864-- | Parse basic architectural specification 
     
    7268-- @ 
    7369basicArchSpec :: LogicGraph -> AParser st (Annoted ARCH_SPEC) 
    74 basicArchSpec l = 
    75     do kUnit <- pluralKeyword unitS 
    76        (declDefn, ps) <- auxItemList [resultS] [] (unitDeclDefn l) (,) 
    77        kResult <- asKey resultS 
    78        expr <- annoParser2 $ unitExpr l 
    79        (m, an) <- optSemi 
    80        return $ emptyAnno $ Basic_arch_spec declDefn (appendAnno expr an) 
    81          $ tokPos kUnit `appRange` ps `appRange` catRange (kResult:m) 
     70basicArchSpec l = do 
     71  kUnit <- pluralKeyword unitS 
     72  (declDefn, ps) <- auxItemList [resultS] [] (unitDeclDefn l) (,) 
     73  kResult <- asKey resultS 
     74  expr <- annoParser2 $ unitExpr l 
     75  (m, an) <- optSemi 
     76  return $ emptyAnno $ Basic_arch_spec declDefn (appendAnno expr an) 
     77    $ tokPos kUnit `appRange` ps `appRange` catRange (kResult : m) 
    8278 
    8379-- | Parse unit declaration or definition 
     
    9086    do c <- colonT     -- unit declaration 
    9187       decl <- refSpec l 
    92        (gs, ps) <- option ([], []) $ 
    93          do kGiven <- asKey givenS 
    94             (guts, qs) <- groupUnitTerm l `separatedBy` anComma 
    95             return (guts, kGiven:qs) 
    96        return (Unit_decl name decl gs $ catRange (c:ps)) 
     88       (gs, ps) <- option ([], []) $ do 
     89         kGiven <- asKey givenS 
     90         (guts, qs) <- groupUnitTerm l `separatedBy` anComma 
     91         return (guts, kGiven : qs) 
     92       return $ Unit_decl name decl gs $ catRange $ c : ps 
    9793     <|> -- unit definition 
    9894     unitDefn' l name 
     
    10399-- @ 
    104100unitRef :: LogicGraph -> AParser st UNIT_REF 
    105 unitRef l = 
    106         do name <- simpleId 
    107            sep1 <- asKey toS 
    108            usp <- refSpec l 
    109            return $ Unit_ref name usp $ tokPos sep1 
     101unitRef l = do 
     102  name <- simpleId 
     103  sep1 <- asKey toS 
     104  usp <- refSpec l 
     105  return $ Unit_ref name usp $ tokPos sep1 
    110106 
    111107-- | Parse unit specification 
     
    120116    do kClosed <- asKey closedS 
    121117       uSpec <- unitSpec l 
    122        return (Closed_unit_spec uSpec $ tokPos kClosed) 
     118       return $ Closed_unit_spec uSpec $ tokPos kClosed 
    123119    <|> -- unit type 
    124120{- NOTE: this can also be a spec name. If this is the case, this unit spec 
    125121           will be converted on the static analysis stage. 
    126122           See Static.AnalysisArchitecture.ana_UNIT_SPEC. -} 
    127     do gps@(gs:gss, _) <- annoParser (groupSpec l) `separatedBy` crossT 
     123    do gps@(gs : gss, _) <- annoParser (groupSpec l) `separatedBy` crossT 
    128124       let rest = unitRestType l gps 
    129        if null gss then do 
     125       if null gss then 
    130126            option ( {- case item gs of 
    131127                    Spec_inst sn [] _ -> Spec_name sn -- annotations are lost 
     
    142138refSpec :: LogicGraph -> AParser st REF_SPEC 
    143139refSpec l = do 
    144       (rs, ps) <- basicRefSpec l `separatedBy` (asKey thenS) 
    145       return $ if isSingle rs then head rs 
    146          else Compose_ref rs $ catRange ps 
     140  (rs, ps) <- basicRefSpec l `separatedBy` asKey thenS 
     141  return $ if isSingle rs then head rs else Compose_ref rs $ catRange ps 
    147142 
    148143-- | Parse refinement specification 
     
    179174    r <- asKey refinedS 
    180175    (ms, ps) <- option ([], []) $ do 
    181                  v <- asKey viaS -- not a keyword 
    182                  (m, ts) <- parseMapping l 
    183                  return (m, v : ts) 
     176      v <- asKey viaS -- not a keyword 
     177      (m, ts) <- parseMapping l 
     178      return (m, v : ts) 
    184179    t <- asKey toS 
    185180    rsp <- refSpec l 
     
    211206-- The SYMB-MAP-ITEMS-LIST is parsed using parseItemsMap. 
    212207fitArgUnit :: LogicGraph -> AParser st FIT_ARG_UNIT 
    213 fitArgUnit l = 
    214     do o <- oBracketT 
    215        ut <- unitTerm l 
    216        (fargs, qs) <- option ([], []) 
    217                        (do kFit <- asKey fitS 
    218                            (smis, ps) <- parseMapping l 
    219                            return (smis, kFit:ps)) 
    220        c <- cBracketT 
    221        return $ Fit_arg_unit ut fargs $ toRange o qs c 
     208fitArgUnit l = do 
     209  o <- oBracketT 
     210  ut <- unitTerm l 
     211  (fargs, qs) <- option ([], []) $ do 
     212    kFit <- asKey fitS 
     213    (smis, ps) <- parseMapping l 
     214    return (smis, kFit : ps) 
     215  c <- cBracketT 
     216  return $ Fit_arg_unit ut fargs $ toRange o qs c 
    222217 
    223218-- | Parse unit term. 
     
    232227-- the operator precedence; see other 'unitTerm*' functions. 
    233228unitTerm :: LogicGraph -> AParser st (Annoted UNIT_TERM) 
    234 unitTerm l = unitTermAmalgamation l 
     229unitTerm = unitTermAmalgamation 
    235230 
    236231-- | Parse unit amalgamation. 
     
    239234-- @ 
    240235unitTermAmalgamation :: LogicGraph -> AParser st (Annoted UNIT_TERM) 
    241 unitTermAmalgamation l = 
    242     do (uts, toks) <- annoParser2 (unitTermLocal l) `separatedBy` (asKey andS) 
    243        return (case uts of 
    244                [ut] -> ut 
    245                _ -> emptyAnno (Amalgamation uts (catRange toks))) 
     236unitTermAmalgamation l = do 
     237    (uts, toks) <- annoParser2 (unitTermLocal l) `separatedBy` asKey andS 
     238    return $ case uts of 
     239      [ut] -> ut 
     240      _ -> emptyAnno $ Amalgamation uts $ catRange toks 
    246241 
    247242-- | Parse local unit term 
     
    260255         $ tokPos kLocal `appRange` ps `appRange` tokPos kWithin 
    261256    <|> -- translation/reduction 
    262     do ut <- unitTermTransRed l 
    263        return ut 
     257       unitTermTransRed l 
    264258 
    265259-- | Parse translation or reduction unit term 
     
    273267unitTermTransRed :: LogicGraph -> AParser st (Annoted UNIT_TERM) 
    274268unitTermTransRed l = groupUnitTerm l >>= 
    275     translation_list l Unit_translation Unit_reduction 
     269    translationList l Unit_translation Unit_reduction 
    276270 
    277271-- | Parse unit expression 
     
    281275-- @ 
    282276unitExpr :: LogicGraph -> AParser st (Annoted UNIT_EXPRESSION) 
    283 unitExpr l = 
    284          do (bindings, poss) <- option ([], nullRange) 
    285              (do kLambda <- asKey lambdaS 
    286                  (bindings, poss) <- unitBinding l `separatedBy` anSemi 
    287                  kDot <- dotT 
    288                  return (bindings, toRange kLambda poss kDot)) 
    289             ut <- unitTerm l 
    290             return (emptyAnno $ Unit_expression bindings ut poss) 
     277unitExpr l = do 
     278  (bindings, poss) <- option ([], nullRange) $ do 
     279    kLambda <- asKey lambdaS 
     280    (bindings, poss) <- unitBinding l `separatedBy` anSemi 
     281    kDot <- dotT 
     282    return (bindings, toRange kLambda poss kDot) 
     283  ut <- unitTerm l 
     284  return $ emptyAnno $ Unit_expression bindings ut poss 
    291285 
    292286-- | Parse unit binding 
     
    295289-- @ 
    296290unitBinding :: LogicGraph -> AParser st UNIT_BINDING 
    297 unitBinding l = 
    298     do name <- simpleId 
    299        kCol <- colonT 
    300        usp <- unitSpec l 
    301        return (Unit_binding name usp $ tokPos kCol) 
     291unitBinding l = do 
     292  name <- simpleId 
     293  kCol <- colonT 
     294  usp <- unitSpec l 
     295  return $ Unit_binding name usp $ tokPos kCol 
    302296 
    303297-- | Parse an unit definition 
     
    310304unitDefn' :: LogicGraph -> SIMPLE_ID -> AParser st UNIT_DECL_DEFN 
    311305unitDefn' l name = do 
    312        kEqu <- equalT 
    313        expr <- annoParser2 $ unitExpr l 
    314        return (Unit_defn name (item expr) $ tokPos kEqu) 
     306  kEqu <- equalT 
     307  expr <- annoParser2 $ unitExpr l 
     308  return $ Unit_defn name (item expr) $ tokPos kEqu 
  • trunk/Syntax/Parse_AS_Structured.hs

    r11264 r12725  
    1919    , logicName 
    2020    , parseMapping 
    21     , translation_list 
     21    , translationList 
    2222    ) where 
    2323 
     
    3232    , lookupComorphism) 
    3333import Syntax.AS_Structured 
     34 
    3435import Common.AS_Annotation 
    3536import Common.AnnoState 
     
    3839import Common.Token 
    3940import Common.Id 
     41 
    4042import Text.ParserCombinators.Parsec 
     43 
    4144import Data.List((\\)) 
     45import Control.Monad 
    4246 
    4347-- | parse annotations and then still call an annotation parser 
    4448annoParser2 :: AParser st (Annoted a) -> AParser st (Annoted a) 
    45 annoParser2 parser = bind (\ x (Annoted y pos l r) -> 
    46                            Annoted y pos (x ++ l) r) annos parser 
     49annoParser2 = 
     50  liftM2 (\ x (Annoted y pos l r) -> Annoted y pos (x ++ l) r) annos 
    4751 
    4852------------------------------------------------------------------------ 
     
    128132callSymParser :: Maybe (AParser st a) -> String -> String -> 
    129133                 AParser st ([a], [Token]) 
    130 callSymParser p name itemType = do 
    131     case p of 
    132          Nothing -> fail ("no symbol" ++itemType++ " parser for language " 
    133                             ++ name) 
    134          Just pa -> pa `separatedBy` plainComma 
     134callSymParser p name itemType = case p of 
     135    Nothing -> 
     136        fail $ "no symbol" ++ itemType ++ " parser for language " ++ name 
     137    Just pa -> separatedBy pa plainComma 
    135138 
    136139parseItemsMap :: AnyLogic -> AParser st (G_symb_map_items_list, [Token]) 
     
    178181 
    179182spec :: LogicGraph -> AParser st (Annoted SPEC) 
    180 spec l = do (sps,ps) <- annoParser2 (specA l) `separatedBy` (asKey thenS) 
    181             return $ case sps of 
    182                     [sp] -> sp 
    183                     _ -> emptyAnno (Extension sps $ catRange ps) 
     183spec l = do 
     184  (sps,ps) <- annoParser2 (specA l) `separatedBy` asKey thenS 
     185  return $ case sps of 
     186    [sp] -> sp 
     187    _ -> emptyAnno (Extension sps $ catRange ps) 
    184188 
    185189specA :: LogicGraph -> AParser st (Annoted SPEC) 
    186 specA l = do (sps,ps) <- annoParser2 (specB l) `separatedBy` (asKey andS) 
    187              return $ case sps of 
    188                      [sp] -> sp 
    189                      _ -> emptyAnno (Union sps $ catRange ps) 
     190specA l = do 
     191  (sps,ps) <- annoParser2 (specB l) `separatedBy` asKey andS 
     192  return $ case sps of 
     193    [sp] -> sp 
     194    _ -> emptyAnno (Union sps $ catRange ps) 
    190195 
    191196specB :: LogicGraph -> AParser st (Annoted SPEC) 
    192 specB l = do    p1 <- asKey localS 
    193                 sp1 <- aSpec l 
    194                 p2 <- asKey withinS 
    195                 sp2 <- annoParser2 $ specB l 
    196                 return (emptyAnno $ Local_spec sp1 sp2 
    197                                   $ tokPos p1 `appRange` tokPos p2) 
    198           <|> specC l 
     197specB l = do 
     198    p1 <- asKey localS 
     199    sp1 <- aSpec l 
     200    p2 <- asKey withinS 
     201    sp2 <- annoParser2 $ specB l 
     202    return (emptyAnno $ Local_spec sp1 sp2 $ tokPos p1 `appRange` tokPos p2) 
     203  <|> specC l 
    199204 
    200205specC :: LogicGraph -> AParser st (Annoted SPEC) 
    201206specC lG = do 
    202207    let spD = annoParser $ specD lG 
    203         rest = spD >>= translation_list lG Translation Reduction 
     208        rest = spD >>= translationList lG Translation Reduction 
    204209    l@(Logic lid) <- lookupCurrentLogic "specC" lG 
    205210    -- if the current logic has an associated data_logic, 
     
    217222            <|> rest 
    218223 
    219 translation_list :: LogicGraph -> (Annoted b -> RENAMING -> b) 
    220                  -> (Annoted b -> RESTRICTION -> b) -> Annoted b 
    221                  -> AParser st (Annoted b) 
    222 translation_list l ftrans frestr sp = 
     224translationList :: LogicGraph -> (Annoted b -> RENAMING -> b) 
     225  -> (Annoted b -> RESTRICTION -> b) -> Annoted b -> AParser st (Annoted b) 
     226translationList l ftrans frestr sp = 
    223227     do sp' <- translation l sp ftrans frestr 
    224         translation_list l ftrans frestr (emptyAnno sp') 
    225  <|> return sp 
     228        translationList l ftrans frestr (emptyAnno sp') 
     229  <|> return sp 
    226230 
    227231-- | Parse renaming 
     
    265269 
    266270groupSpecLookhead :: AParser st Token 
    267 groupSpecLookhead = oBraceT <|> ((simpleId << annos) 
    268                                  `followedWith` 
    269                                  (asKey withS <|> asKey hideS 
    270                                   <|> asKey revealS <|> asKey andS 
    271                                   <|> asKey thenS <|> cBraceT 
    272                                   <|> asKey fitS <|> asKey viewS 
    273                                   <|> asKey specS <|> asKey archS 
    274                                   <|> asKey unitS 
    275                                   <|> asKey withinS <|> asKey endS 
    276                                   <|> oBracketT <|> cBracketT 
    277                                   <|> (eof >> return (Token "" nullRange)))) 
     271groupSpecLookhead = oBraceT <|> followedWith (simpleId << annos) 
     272  (asKey withS <|> asKey hideS <|> asKey revealS <|> asKey andS 
     273   <|> asKey thenS <|> cBraceT <|> asKey fitS <|> asKey viewS 
     274   <|> asKey specS <|> asKey archS <|> asKey unitS <|> asKey withinS 
     275   <|> asKey endS <|> oBracketT <|> cBracketT 
     276   <|> (eof >> return (Token "" nullRange))) 
    278277 
    279278specD :: LogicGraph -> AParser st SPEC 
     
    293292specE l = logicSpec l 
    294293      <|> (lookAhead groupSpecLookhead >> groupSpec l) 
    295       <|> do 
    296         nl <- lookupCurrentLogic "basic spec" l 
    297         basicSpec nl 
     294      <|> (lookupCurrentLogic "basic spec" l >>= basicSpec) 
    298295 
    299296-- | call a logic specific parser if it exists 
    300297callParser :: Maybe (AParser st a) -> String -> String -> AParser st a 
    301 callParser p name itemType = do 
    302     case p of 
    303          Nothing -> fail ("no "++itemType++" parser for language " 
    304                             ++ name) 
    305          Just pa -> pa 
     298callParser p name itemType = case p of 
     299  Nothing -> fail $ "no "++ itemType ++ " parser for language " ++ name 
     300  Just pa -> pa 
    306301 
    307302basicSpec :: AnyLogic -> AParser st SPEC 
     
    330325 
    331326aSpec :: LogicGraph -> AParser st (Annoted SPEC) 
    332 aSpec l = annoParser2 (spec l) 
     327aSpec = annoParser2 . spec 
    333328 
    334329groupSpec :: LogicGraph -> AParser st SPEC