%%
%% Jimple grammar
%%
module languages/jimple/Main
imports
languages/jimple/Expressions
languages/jimple/Lexical
languages/jimple/Modifiers
languages/jimple/Names
languages/jimple/Types
languages/jimple/Statements
languages/jimple/Whitespace
exports
sorts File
context-free syntax
Modifier* FileType ClassName ExtendsClause? ImplementsClause? FileBody -> File {cons("File")}
sorts FileType FileBody ExtendsClause ImplementsClause
context-free syntax
"class" -> FileType {cons("Class")}
"interface" -> FileType {cons("Interface")}
"extends" ClassName -> ExtendsClause {cons("Extends")}
"implements" {ClassName ","}+ -> ImplementsClause {cons("Implements")}
"{" Member* "}" -> FileBody {cons("FileBody")}
sorts Member Parameter ThrowsClause
context-free syntax
Modifier* Type Name ";" -> Member {cons("Field")}
Modifier* Type Name "(" {Parameter ","}* ")" ThrowsClause? MethodBody -> Member {cons("Method")}
NonVoidType -> Parameter
"throws" {ClassName ","}+ -> ThrowsClause {cons("Throws")}
sorts MethodBody CatchClause
context-free syntax
";" -> MethodBody {cons("Empty")}
"{" Declaration* Stmt* CatchClause* "}" -> MethodBody {cons("Body")}
"catch" ClassName "from" LabelName "to" LabelName "with" LabelName ";" -> CatchClause {cons("Trap")}
sorts Declaration
context-free syntax
JimpleType {LocalName ","}+ ";" -> Declaration {cons("Decl")}