module Casl-Struct
%% written/changed by Bjarke Wedemeijer (January 1998)
%% adapted by Mark van den Brand (June 1999)
%% adapted by Mark van den Brand (November 2000)
%% adapted by Christian Maeder (January 2002)
%% adapted by Christian Maeder (February 2004)
imports Casl-BasicItems
exports
sorts
Spec Spec-Defn View-Defn Spec-Name Symb-Map-Items Group-Spec Opt-End
context-free syntax
%% Spec
Spec-3 -> Spec-2
Spec-2 -> Spec-1
Spec-1 -> Spec
Basic-Spec -> Spec-3
Spec-3 Renaming -> Spec-3
Spec-3 Restriction -> Spec-3
Spec-2 "and" {Spec-2 "and"}+ -> Spec-1
Spec-1 "then" {Spec-1 "then"}+ -> Spec
Ann "free" Group-Spec -> Spec-3
Ann "local" Spec "within" Spec-2 -> Spec-2
Ann "closed" Group-Spec -> Spec-3
Ann Group-Spec -> Spec-3
%% Group-Spec
Spec-Name -> Group-Spec
"{" Spec "}" -> Group-Spec
Spec-Name Fit+ -> Group-Spec
%% new Fit, not in concrete syntax
"[" Fit-Arg "]" -> Fit
%% Renaming
"with" {Symb-Map-Items ","}+ -> Renaming
%% Restriction
"hide" {Symb-Items ","}+ -> Restriction
"reveal" {Symb-Map-Items ","}+ -> Restriction
%% Spec-Defn
"spec" Spec-Name "=" Spec Opt-End -> Spec-Defn
"spec" Spec-Name Some-Generics "=" Spec Opt-End -> Spec-Defn
%% Some-Generics
Some-Params -> Some-Generics
Some-Params Some-Imports -> Some-Generics
%% Some-Params
Param+ -> Some-Params
"[" Spec "]" -> Param
%% Imports
"given" {Group-Spec ","}+ -> Some-Imports
%% Fit-Arg
Spec "fit" {Symb-Map-Items ","}+ -> Fit-Arg
Spec -> Fit-Arg
"view" View-Name -> Fit-Arg
"view" View-Name Fit+ -> Fit-Arg
%% View-Defn
"view" View-Name ":"
View-Type Opt-End -> View-Defn
"view" View-Name ":"
View-Type "=" {Symb-Map-Items ","}+ Opt-End -> View-Defn
"view" View-Name Some-Generics ":"
View-Type Opt-End -> View-Defn
"view" View-Name Some-Generics ":"
View-Type "=" {Symb-Map-Items ","}+ Opt-End -> View-Defn
%% View-Type
Group-Spec "to" Group-Spec -> View-Type
%% Symb-Items
Symb -> Symb-Items
Some-Symb-Kind {Symb ","}+ -> Symb-Items
%% Symb-Map-Items
Symb-Or-Map -> Symb-Map-Items
Some-Symb-Kind {Symb-Or-Map ","}+ -> Symb-Map-Items
%% Some-Symb-Kind
Sort-S -> Some-Symb-Kind
Op-S -> Some-Symb-Kind
Pred-S -> Some-Symb-Kind
%% Symb
Id -> Symb
Id ":" Type -> Symb
%% Type
Op-Type -> Type
Pred-Type -> Type
%% Symb-Map
Symb "|->" Symb -> Symb-Map
%% Symb-Or-Map
Symb -> Symb-Or-Map
Symb-Map -> Symb-Or-Map
Simple-Id -> Spec-Name
Simple-Id -> View-Name
%% Opt-End
("end" Ann)? -> Opt-End