AS_Basic_CASL.der.hs revision dfd9b88881346e61fa33e54f7d03924404e35d46
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian MaederModule : $Header$
3a6c7a7ff823616f56cd3d205fc44664a683effdChristian MaederDescription : Abstract syntax of CASL basic specifications
73dfcef93ee2ba07fedf4f3c74bace31853d1b9fChristian MaederCopyright : (c) Klaus Luettich, Christian Maeder, Uni Bremen 2002-2006
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian MaederMaintainer : Christian.Maeder@dfki.de
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian MaederStability : provisional
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian MaederPortability : portable
e6d40133bc9f858308654afb1262b8b483ec5922Till MossakowskiAbstract Syntax of CASL Basic_specs, Symb_items and Symb_map_items.
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder Follows Sect. II:2.2 of the CASL Reference Manual.
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederimport qualified Data.Set as Set
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder-- DrIFT command
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder{-! global: GetRange !-}
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederdata BASIC_SPEC b s f = Basic_spec [Annoted (BASIC_ITEMS b s f)]
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata BASIC_ITEMS b s f = Sig_items (SIG_ITEMS s f)
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder {- the Annotation following the keyword is dropped
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder but preceding the keyword is now an Annotation allowed -}
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder | Free_datatype SortsKind [Annoted DATATYPE_DECL] Range
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder -- pos: free, type, semi colons
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Sort_gen [Annoted (SIG_ITEMS s f)] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: generated, opt. braces
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Var_items [VAR_DECL] Range
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder -- pos: var, semi colons
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Local_var_axioms [VAR_DECL] [Annoted (FORMULA f)] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: forall, semi colons, dots
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder | Axiom_items [Annoted (FORMULA f)] Range
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder | Ext_BASIC_ITEMS b
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata SortsKind = NonEmptySorts | PossiblyEmptySorts deriving Show
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowskidata SIG_ITEMS s f = Sort_items SortsKind [Annoted (SORT_ITEM f)] Range
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski -- pos: sort, semi colons
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski | Op_items [Annoted (OP_ITEM f)] Range
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski -- pos: op, semi colons
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski | Pred_items [Annoted (PRED_ITEM f)] Range
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski -- pos: pred, semi colons
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski | Datatype_items SortsKind [Annoted DATATYPE_DECL] Range
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski -- type, semi colons
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski | Ext_SIG_ITEMS s
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata SORT_ITEM f = Sort_decl [SORT] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: commas
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Subsort_decl [SORT] SORT Range
6abfd7000f15635fd29746bd841b4c36819e552bTill Mossakowski -- pos: commas, <
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder | Subsort_defn SORT VAR SORT (Annoted (FORMULA f)) Range
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder {- pos: "=", "{", ":", ".", "}"
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder the left anno list stored in Annoted Formula is
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder parsed after the equal sign -}
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Iso_decl [SORT] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederdata OP_ITEM f = Op_decl [OP_NAME] OP_TYPE [OP_ATTR f] Range
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder -- pos: commas, colon, OP_ATTR sep. by commas
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder | Op_defn OP_NAME OP_HEAD (Annoted (TERM f)) Range
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maeder deriving Show
1bc5dccbf0083a620ae1181c717fea75e4af5e5cChristian Maederdata OpKind = Total | Partial deriving (Show, Eq, Ord)
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata OP_TYPE = Op_type OpKind [SORT] SORT Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "*"s, "->" ; if null [SORT] then Range = [] or pos: "?"
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder deriving (Show, Eq, Ord)
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederargs_OP_TYPE :: OP_TYPE -> [SORT]
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederargs_OP_TYPE (Op_type _ args _ _) = args
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maederres_OP_TYPE :: OP_TYPE -> SORT
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederres_OP_TYPE (Op_type _ _ res _) = res
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata OP_HEAD = Op_head OpKind [VAR_DECL] SORT Range
0fe1b901cec27c06b8aad7548f56a7cab4dee6a4Till Mossakowski -- pos: "(", semicolons, ")", colon
0fe1b901cec27c06b8aad7548f56a7cab4dee6a4Till Mossakowski deriving Show
0fe1b901cec27c06b8aad7548f56a7cab4dee6a4Till Mossakowskidata OP_ATTR f = Assoc_op_attr | Comm_op_attr | Idem_op_attr
0fe1b901cec27c06b8aad7548f56a7cab4dee6a4Till Mossakowski | Unit_op_attr (TERM f)
0fe1b901cec27c06b8aad7548f56a7cab4dee6a4Till Mossakowski deriving (Show, Eq, Ord)
0fe1b901cec27c06b8aad7548f56a7cab4dee6a4Till Mossakowskidata PRED_ITEM f = Pred_decl [PRED_NAME] PRED_TYPE Range
b20cc520e698253354303b7bf3bc17f84240b213Klaus Luettich -- pos: commas, colon
da955132262baab309a50fdffe228c9efe68251dCui Jian | Pred_defn PRED_NAME PRED_HEAD (Annoted (FORMULA f)) Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "<=>"
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata PRED_TYPE = Pred_type [SORT] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: if null [SORT] then "(",")" else "*"s
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving (Show, Eq, Ord)
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maederdata PRED_HEAD = Pred_head [VAR_DECL] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "(",semi colons , ")"
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata DATATYPE_DECL = Datatype_decl SORT [Annoted ALTERNATIVE] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "::=", "|"s
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maederdata ALTERNATIVE = Alt_construct OpKind OP_NAME [COMPONENTS] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "(", semi colons, ")" optional "?"
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Subsorts [SORT] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: sort, commas
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata COMPONENTS = Cons_select OpKind [OP_NAME] SORT Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: commas, colon or ":?"
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder deriving Show
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maederdata VAR_DECL = Var_decl [VAR] SORT Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: commas, colon
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder deriving (Show, Eq, Ord)
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian MaedervarDeclRange :: VAR_DECL -> [Pos]
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian MaedervarDeclRange (Var_decl vs s _) = case vs of
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder v : _ -> joinRanges [tokenRange v, idRange s]
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder{- Position definition for FORMULA:
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder Information on parens are also encoded in Range. If there
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder are more Pos than necessary there is a pair of Pos enclosing the
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder other Pos informations which encode the brackets of every kind
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maederdata FORMULA f = Quantification QUANTIFIER [VAR_DECL] (FORMULA f) Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: QUANTIFIER, semi colons, dot
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Conjunction [FORMULA f] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "/\"s
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Disjunction [FORMULA f] Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "\/"s
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Implication (FORMULA f) (FORMULA f) Bool Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "=>" or "if" (True -> "=>")
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder | Equivalence (FORMULA f) (FORMULA f) Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: "<=>"
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | Negation (FORMULA f) Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | True_atom Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder | False_atom Range
acabd9ab36e1870f6f02c513bcfbfd10ffd118e0Christian Maeder -- pos: false
999f839e42d594e4ae288208fec398626837c41cTill Mossakowski | Predication PRED_SYMB [TERM f] Range
999f839e42d594e4ae288208fec398626837c41cTill Mossakowski -- pos: opt. "(",commas,")"
999f839e42d594e4ae288208fec398626837c41cTill Mossakowski | Definedness (TERM f) Range
999f839e42d594e4ae288208fec398626837c41cTill Mossakowski | Existl_equation (TERM f) (TERM f) Range
999f839e42d594e4ae288208fec398626837c41cTill Mossakowski | Strong_equation (TERM f) (TERM f) Range
ad69cb3627839ed3d33f13d71c81378b65a24b35Till Mossakowski | Membership (TERM f) SORT Range
{- Mixfix_ Term/Token/(..)/[..]/{..}
their identity w.r.t. the original signature. The newSort in a
the constraint (i.e. a "parameter sort"). Note that this representation of
-- | no duplicate sorts, i.e. injective sort map?
"CASL/AS_Basic_CASL: Internal error: Unqualified OP_SYMB in Sort_gen_ax"
fails (i.e. delivers Nothing) if the sort map is not injective -}
| Mixfix_term [TERM f] -- not starting with Mixfix_sorted_term/cast