Parse_AS_Basic.hs revision c56a356d3fcc5e123efa790aab320781d94df3c7
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeModule : $Header$
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeDescription : Parser for basic specs
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeCopyright : (c) Jonathan von Schroeder, DFKI GmbH 2010
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeMaintainer : <jonathan.von_schroeder@dfki.de>
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeStability : experimental
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyePortability : portable
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeParser for abstract syntax for propositional logic
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye <http://en.wikipedia.org/wiki/Propositional_logic>
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye ( basicSpec -- Parser for basic specs
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye , symbMapItems
64b763950bf11e9357facbd2b5666631a895c085Trond Norbyeimport qualified Common.AnnoState as AnnoState
64b763950bf11e9357facbd2b5666631a895c085Trond Norbyeimport qualified Common.AS_Annotation as Annotation
64b763950bf11e9357facbd2b5666631a895c085Trond Norbyeimport Common.Keywords as Keywords
64b763950bf11e9357facbd2b5666631a895c085Trond Norbyeimport Common.Lexer as Lexer
64b763950bf11e9357facbd2b5666631a895c085Trond Norbyeimport QBF.AS_BASIC_QBF as AS_BASIC
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyepropKeywords :: [String]
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyepropKeywords =
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Toplevel parser for basic specs
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyebasicSpec :: AnnoState.AParser st AS_BASIC.BASICSPEC
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye fmap AS_BASIC.BasicSpec (AnnoState.annosParser parseBasicItems)
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye <|> (Lexer.oBraceT >> Lexer.cBraceT >> return (AS_BASIC.BasicSpec []))
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for basic items
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeparseBasicItems :: AnnoState.AParser st AS_BASIC.BASICITEMS
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeparseBasicItems = parsePredDecl <|> parseAxItems
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | parser for predicate declarations
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeparsePredDecl :: AnnoState.AParser st AS_BASIC.BASICITEMS
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeparsePredDecl = fmap AS_BASIC.PredDecl predItem
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | parser for AxiomItems
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeparseAxItems :: AnnoState.AParser st AS_BASIC.BASICITEMS
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeparseAxItems = do
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye (fs, ds) <- aFormula `Lexer.separatedBy` AnnoState.dotT
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye let _ = Id.catRange (d : ds)
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye ns = init fs ++ [Annotation.appendAnno (last fs) an]
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Any word to token
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyepropId :: GenParser Char st Id.Token
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyepropId = Lexer.pToken $ reserved propKeywords Lexer.scanAnyWords
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | parser for predicates = propositions
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyepredItem :: AnnoState.AParser st AS_BASIC.PREDITEM
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyepredItem = do
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye v <- AnnoState.asKey (Keywords.propS ++ Keywords.sS) <|>
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye (ps, cs) <- propId `Lexer.separatedBy` AnnoState.anComma
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye return $ AS_BASIC.PredItem ps $ Id.catRange $ v : cs
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for implies @=>@
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for and @\/\ @
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for or @\\\/@
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for true
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for false
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for not
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for negation
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for equivalence @<=>@
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for quantifier forall
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for quantifier forall
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye-- | Parser for primitive formulae
64b763950bf11e9357facbd2b5666631a895c085Trond NorbyeprimFormula :: AnnoState.AParser st AS_BASIC.FORMULA
c0550b01024b910b8c1468811c0ea663b10b1372Trond NorbyeprimFormula =
c0550b01024b910b8c1468811c0ea663b10b1372Trond Norbye do c <- trueKey
c0550b01024b910b8c1468811c0ea663b10b1372Trond Norbye do c <- falseKey
c0550b01024b910b8c1468811c0ea663b10b1372Trond Norbye do c <- notKey <|> negKey <?> "\"not\""
64b763950bf11e9357facbd2b5666631a895c085Trond Norbye k <- primFormula
<|> fmap AS_BASIC.Predication propId
(fs, ps) <- primFormula `Lexer.separatedBy` andKey
return (AS_BASIC.Conjunction (f : fs)
(Id.catRange (c : ps)))
(fs, ps) <- primFormula `Lexer.separatedBy` orKey
return (AS_BASIC.Disjunction (f : fs)
(Id.catRange (c : ps)))
(fs, ps) <- andOrFormula `Lexer.separatedBy` implKey
return (makeImpl (f : fs) (Id.catPosAux (c : ps)))
makeImpl (f : r) (c : p) = AS_BASIC.Implication f
(makeImpl r p) (Id.Range [c])
f <- impFormula << AnnoState.addAnnos
Lexer.cParenT >> return f
aFormula = AnnoState.allAnnoParser impFormula