%%%
%% Section 8.8: Constructor Declarations
%%
%% @author Martin Bravenboer <martin.bravenboer@gmail.com>
%%%
module languages/java-15/classes/ConstructorDeclarations
imports
languages/java-15/lexical/Identifiers
languages/java-15/lexical/Modifiers
languages/java-15/interfaces/Annotations
languages/java-15/statements/Main
languages/java-15/expressions/Main
exports
sorts
ConstrDec
ConstrBody
ConstrHead
ConstrInv
context-free syntax
ConstrHead ConstrBody -> ConstrDec {cons("ConstrDec")}
(Anno | ConstrMod)* TypeParams? Id "(" {FormalParam ","}* ")" Throws? -> ConstrHead {cons("ConstrDecHead")}
"{" ConstrInv? BlockStm* "}" -> ConstrBody {cons("ConstrBody")}
TypeArgs? "this" "(" {Expr ","}* ")" ";" -> ConstrInv {cons("AltConstrInv")}
TypeArgs? "super" "(" {Expr ","}* ")" ";" -> ConstrInv {cons("SuperConstrInv")}
Expr "." TypeArgs? "super" "(" {Expr ","}* ")" ";" -> ConstrInv {cons("QSuperConstrInv")}
sorts ConstrMod
context-free syntax
Public -> ConstrMod
Protected -> ConstrMod
Private -> ConstrMod