%%%
%% Section 8.4: Method Declarations
%%
%% @author Martin Bravenboer <martin.bravenboer@gmail.com>
%%%
module languages/java-15/classes/MethodDeclarations
imports
languages/java-15/lexical/Identifiers
languages/java-15/lexical/Modifiers
languages/java-15/types/Main
languages/java-15/classes/FieldDeclarations
languages/java-15/interfaces/Annotations
languages/java-15/statements/Blocks
exports
sorts
MethodDec
MethodDecHead
ResultType
context-free syntax
MethodDecHead MethodBody -> MethodDec {cons("MethodDec")}
(Anno | MethodMod)* TypeParams? ResultType Id "(" {FormalParam ","}* ")" Throws? -> MethodDecHead {cons("MethodDecHead")}
(Anno | MethodMod)* TypeParams? ResultType Id "(" {FormalParam ","}* ")" Dim+ Throws? -> MethodDecHead {cons("DeprMethodDecHead")}
Type -> ResultType
"void" -> ResultType {cons("Void")}
sorts FormalParam
context-free syntax
(Anno | VarMod)* Type VarDecId -> FormalParam {cons("Param")}
(Anno | VarMod)* Type "..." VarDecId -> FormalParam {cons("VarArityParam")}
sorts VarMod
context-free syntax
Final -> VarMod
sorts MethodMod
context-free syntax
Public -> MethodMod
Protected -> MethodMod
Private -> MethodMod
Abstract -> MethodMod
Static -> MethodMod
Final -> MethodMod
Synchronized -> MethodMod
Native -> MethodMod
StrictFP -> MethodMod
%%%
%% Section 8.4.6: Method Throws
%%%
sorts
Throws
ExceptionType
context-free syntax
"throws" {ExceptionType ","}+ -> Throws {cons("ThrowsDec")}
ClassType -> ExceptionType
%% TypeVar -> ExceptionType
%%%
%% Section 8.4.7: Method Body
%%%
sorts MethodBody
context-free syntax
Block -> MethodBody
";" -> MethodBody {cons("NoMethodBody")}