module languages/java/syntax/Statements imports languages/java/syntax/Expressions imports languages/java/syntax/MethodDecl imports languages/java/syntax/ClassDecl exports sorts Block BlockStatement Finally CatchClause TryStatement SynchronizedStatement ThrowStatement ReturnStatement ContinueStatement BreakStatement StatementExpressionList ForUpdate ForInit LocalVariableDeclaration ForStatementNoShortIf StatementNoShortIf ForStatement Statement DoStatement WhileStatementNoShortIf WhileStatement SwitchLabel SwitchBlockStatementGroup SwitchBlock SwitchStatement IfThenElseStatementNoShortIf IfThenElseStatement IfThenStatement ExpressionStatement LabeledStatementNoShortIf LabeledStatement EmptyStatement StatementWithoutTrailingSubstatement LocalVariableDeclarationStatement AssertStatement context-free syntax "{" BlockStatement* "}" -> Block {cons("BlockStatement-s")} Modifier* LocalVariableDeclarationStatement -> BlockStatement {cons("LocalVariableDeclarationStatement")} Statement -> BlockStatement {cons("Statement")} LocalVariableDeclaration ";" -> LocalVariableDeclarationStatement {cons("semicolon")} Type {VariableDeclarator ","}+ -> LocalVariableDeclaration {cons("comma")} StatementWithoutTrailingSubstatement -> Statement {cons("StatementWithoutTrailingSubstatement")} LabeledStatement -> Statement {cons("LabeledStatement")} IfThenStatement -> Statement {cons("IfThenStatement")} IfThenElseStatement -> Statement {cons("IfThenElseStatement")} WhileStatement -> Statement {cons("WhileStatement")} ForStatement -> Statement {cons("ForStatement")} StatementWithoutTrailingSubstatement -> StatementNoShortIf {cons("StatementWithoutTrailingSubstatement1")} LabeledStatementNoShortIf -> StatementNoShortIf {cons("LabeledStatementNoShortIf")} IfThenElseStatementNoShortIf -> StatementNoShortIf {cons("IfThenElseStatementNoShortIf")} WhileStatementNoShortIf -> StatementNoShortIf {cons("WhileStatementNoShortIf")} ForStatementNoShortIf -> StatementNoShortIf {cons("ForStatementNoShortIf")} Block -> StatementWithoutTrailingSubstatement {cons("Block")} EmptyStatement -> StatementWithoutTrailingSubstatement {cons("EmptyStatement")} ExpressionStatement -> StatementWithoutTrailingSubstatement {cons("ExpressionStatement")} SwitchStatement -> StatementWithoutTrailingSubstatement {cons("SwitchStatement")} DoStatement -> StatementWithoutTrailingSubstatement {cons("DoStatement")} BreakStatement -> StatementWithoutTrailingSubstatement {cons("BreakStatement")} ContinueStatement -> StatementWithoutTrailingSubstatement {cons("ContinueStatement")} ReturnStatement -> StatementWithoutTrailingSubstatement {cons("ReturnStatement")} SynchronizedStatement -> StatementWithoutTrailingSubstatement {cons("SynchronizedStatement")} ThrowStatement -> StatementWithoutTrailingSubstatement {cons("ThrowStatement")} TryStatement -> StatementWithoutTrailingSubstatement {cons("TryStatement")} ";" -> EmptyStatement {cons("semicolon1")} Identifier ":" Statement -> LabeledStatement {cons("colon")} Identifier ":" StatementNoShortIf -> LabeledStatementNoShortIf {cons("colon1")} StatementExpression ";" -> ExpressionStatement {cons("semicolon2")} MethodInvocation -> StatementExpression {cons("MethodInvocation")} ClassInstanceCreationExpression -> StatementExpression {cons("ClassInstanceCreationExpression")} ClassDeclaration -> Statement {cons("ClassDeclaration")} "if" "(" Expression ")" Statement -> IfThenStatement {cons("if")} "if" "(" Expression ")" StatementNoShortIf "else" Statement -> IfThenElseStatement {cons("if-else")} "switch" "(" Expression ")" SwitchBlock -> SwitchStatement {cons("switch")} "{" SwitchBlockStatementGroup* SwitchLabel* "}" -> SwitchBlock {cons("SwitchBlockStatementGroup-s-SwitchLabel-s")} SwitchLabel+ BlockStatement+ -> SwitchBlockStatementGroup {cons("SwitchLabel-p-BlockStatement-p")} "case" Expression ":" -> SwitchLabel {cons("case-colon")} "default" ":" -> SwitchLabel {cons("default-colon")} "while" "(" Expression ")" Statement -> WhileStatement {cons("while")} "while" "(" Expression ")" StatementNoShortIf -> WhileStatementNoShortIf {cons("while1")} "do" Statement "while" "(" Expression ")" ";" -> DoStatement {cons("do-while-semicolon")} "for" "(" ForInit? ";" Expression? ";" ForUpdate? ")" Statement -> ForStatement {cons("for-semicolon-semicolon")} StatementExpressionList -> ForInit {cons("StatementExpressionList")} LocalVariableDeclaration -> ForInit {cons("LocalVariableDeclaration")} StatementExpressionList -> ForUpdate {cons("StatementExpressionList1")} {StatementExpression ","}+ -> StatementExpressionList {cons("comma1")} "break" Identifier? ";" -> BreakStatement {cons("break-semicolon")} "continue" Identifier? ";" -> ContinueStatement {cons("continue-semicolon")} "return" Expression? ";" -> ReturnStatement {cons("return-semicolon")} "throw" Expression ";" -> ThrowStatement {cons("throw-semicolon")} "synchronized" "(" Expression ")" Block -> SynchronizedStatement {cons("synchronized")} "try" Block CatchClause+ -> TryStatement {cons("try")} "try" Block CatchClause* Finally -> TryStatement {cons("try1")} "catch" "(" FormalParameter ")" Block -> CatchClause {cons("catch")} "finally" Block -> Finally {cons("finally")} AssertStatement -> Statement {cons("AssertStatement")} "assert" Expression ";" -> AssertStatement {prefer, cons("assertWithExpression")}