module languages/java/syntax/ConstructorDecl

imports languages/java/syntax/Statements 
imports languages/java/syntax/MethodDecl 
imports languages/java/syntax/Modifiers

exports
  sorts ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation ConstructorDeclarator

  context-free syntax
    Modifier* ConstructorDeclarator Throws? ConstructorBody -> ConstructorDeclaration {cons("Modifier-s-ConstructorDeclarator-Throws-opt-ConstructorBody")}
    SimpleName "(" {FormalParameter ","}* ")" -> ConstructorDeclarator {cons("comma5")}
    "{" ExplicitConstructorInvocation? BlockStatement* "}" -> ConstructorBody {cons("ExplicitConstructorInvocation-opt-BlockStatement-s")}
    "this" "(" {Expression ","}* ")" ";" -> ExplicitConstructorInvocation {cons("this-comma-semicolon")}
    "super" "(" {Expression ","}* ")" ";" -> ExplicitConstructorInvocation {cons("super-comma-semicolon")}