%%%
%% Section 8.1: Class Declarations
%%
%% @author Martin Bravenboer <martin.bravenboer@gmail.com>
%%%
module languages/java-15/classes/ClassDeclarations
imports
languages/java-15/lexical/Identifiers
languages/java-15/lexical/Modifiers
languages/java-15/types/ReferenceTypes
languages/java-15/types/TypeVariables
languages/java-15/classes/FieldDeclarations
languages/java-15/classes/MethodDeclarations
languages/java-15/classes/InstanceInitializers
languages/java-15/classes/StaticInitializers
languages/java-15/classes/ConstructorDeclarations
languages/java-15/classes/EnumDeclarations
languages/java-15/interfaces/InterfaceDeclarations
exports
sorts
ClassDec
ClassBody
ClassDecHead
context-free syntax
EnumDec -> ClassDec
ClassDecHead ClassBody -> ClassDec {cons("ClassDec")}
"{" ClassBodyDec* "}" -> ClassBody {cons("ClassBody")}
(Anno | ClassMod)* "class" Id TypeParams? Super? Interfaces? -> ClassDecHead {cons("ClassDecHead")}
%% 8.1.1: Class Modifiers
sorts ClassMod
context-free syntax
Abstract -> ClassMod
Public -> ClassMod
Protected -> ClassMod
Private -> ClassMod
Static -> ClassMod
Final -> ClassMod
StrictFP -> ClassMod
%% 8.1.4: Superclasses and Subclasses
sorts Super
context-free syntax
"extends" ClassType -> Super {cons("SuperDec")}
%% 8.1.5: Superinterfaces
sorts Interfaces
context-free syntax
"implements" {InterfaceType ","}+ -> Interfaces {cons("ImplementsDec")}
%% 8.1.6: Class Body and Member Declarations
sorts
ClassBodyDec
ClassMemberDec
context-free syntax
ClassMemberDec -> ClassBodyDec
InstanceInit -> ClassBodyDec
StaticInit -> ClassBodyDec
ConstrDec -> ClassBodyDec
context-free syntax
FieldDec -> ClassMemberDec
MethodDec -> ClassMemberDec
ClassDec -> ClassMemberDec
InterfaceDec -> ClassMemberDec
";" -> ClassMemberDec {cons("Semicolon")}