// error productions for SEMICOLON // =============================== IdUse package_declaration = PACKAGE error SEMICOLON {: return new IdUse(""); :} ; ImportDecl import_declaration = IMPORT error SEMICOLON {: return new SingleTypeImportDecl(new ParseName("unknown")); :} ; TypeDecl type_declaration = error SEMICOLON {: return new EmptyType(new Modifiers(), "EmptyType", new Opt(), new List()); :} ; BodyDecl class_body_declaration = error SEMICOLON {: return new InstanceInitializer(new Block()); :} ; BodyDecl interface_member_declaration = error SEMICOLON {: return new StaticInitializer(new Block()); :} ; Stmt statement = error SEMICOLON {: return new EmptyStmt(); :} ; // error productions for COMMA // =========================== List interface_type_list = error COMMA interface_type.i {: return new List().add(i); :} ; List variable_declarators = error COMMA variable_declarator.v {: return new List().add(v); :} ; List formal_parameter_list = error COMMA formal_parameter.f {: return new List().add(f); :} ; List class_type_list = error COMMA class_type.c {: return new List().add(c); :} ; List extends_interfaces = error COMMA interface_type.i {: return new List().add(i); :} ; List variable_initializers = error COMMA variable_initializer.v {: return new List().add(v); :} ; List statement_expression_list = error COMMA statement_expression.e {: return new List().add(e); :} ; List argument_list = error COMMA expression.e {: return new List().add(e); :} ; // error productions for { } // ========================== BodyDecl class_body_declaration = error LBRACE {: return new InstanceInitializer(new Block()); :} ; BodyDecl interface_member_declaration = error RBRACE {: return new StaticInitializer(new Block()); :} ; ArrayInit array_initializer = LBRACE error RBRACE {: return new ArrayInit(new List()); :} ; Block block = error RBRACE {: return new Block(new List()); :} ; Block switch_block = LBRACE error RBRACE {: return new Block(new List()); :} ; // error productions for ( ) /* MethodDecl method_declaration = IDENTIFIER.id LPAREN error RPAREN {: return new MethodDecl(null, null, id, new List(), new List(), null, new Opt()); :} ; ConstructorDecl constructor_declaration = modifiers.m IDENTIFIER.id LPAREN error RPAREN throws.tl constructor_body.b {: b.setModifiers(m); b.setID(id); b.setParameterList(new List()); b.setExceptionList(tl); return b; :} | IDENTIFIER.id LPAREN error RPAREN throws.tl constructor_body.b {: b.setID(id); b.setParameterList(new List()); b.setExceptionList(tl); return b; :} | modifiers.m IDENTIFIER.id LPAREN error RPAREN constructor_body.b {: b.setModifiers(m); b.setID(id); b.setParameterList(new List()); return b; :} | IDENTIFIER.id LPAREN error RPAREN constructor_body.b {: b.setID(id); b.setParameterList(new List()); return b; :} ; ExprStmt explicit_constructor_invocation = THIS LPAREN error RPAREN SEMICOLON {: ConstructorAccess c = new ConstructorAccess("this", new List()); c.setStart(THIS.getStart()); c.setEnd(RPAREN.getEnd()); return new ExprStmt(c); :} | SUPER LPAREN error RPAREN SEMICOLON {: SuperConstructorAccess c = new SuperConstructorAccess("super", new List()); c.setStart(SUPER.getStart()); c.setEnd(RPAREN.getEnd()); return new ExprStmt(c); :} | primary.p DOT SUPER LPAREN error RPAREN SEMICOLON {: SuperConstructorAccess c = new SuperConstructorAccess("super", new List()); c.setStart(SUPER.getStart()); c.setEnd(RPAREN.getEnd()); return new ExprStmt(p.qualifiesAccess(c)); :} | name.n DOT SUPER LPAREN error RPAREN SEMICOLON {: SuperConstructorAccess c = new SuperConstructorAccess("super", new List()); c.setStart(SUPER.getStart()); c.setEnd(RPAREN.getEnd()); return new ExprStmt(n.qualifiesAccess(c)); :} ; */ IfStmt if_then_statement = IF LPAREN error RPAREN statement.s {: return new IfStmt(new ParseName("unknown"), s, new Opt()); :} ; IfStmt if_then_else_statement = IF LPAREN error RPAREN statement_no_short_if.t ELSE statement.els {: return new IfStmt(new ParseName("unknown"), t, new Opt(els)); :} ; IfStmt if_then_else_statement_no_short_if = IF LPAREN error RPAREN statement_no_short_if.t ELSE statement_no_short_if.els {: return new IfStmt(new ParseName("unknown"), t, new Opt(els)); :} ; SwitchStmt switch_statement = SWITCH LPAREN error RPAREN switch_block.l {: return new SwitchStmt(new ParseName("unknown"), l); :} ; WhileStmt while_statement = WHILE LPAREN error RPAREN statement.s {: return new WhileStmt(new ParseName("unknown"), s); :} ; WhileStmt while_statement_no_short_if = WHILE LPAREN error RPAREN statement_no_short_if.s {: return new WhileStmt(new ParseName("unknown"), s); :} ; DoStmt do_statement = DO statement.s WHILE LPAREN error RPAREN SEMICOLON {: return new DoStmt(s, new ParseName("unknown")); :} ; // TODO: for_statement SynchronizedStmt synchronized_statement = SYNCHRONIZED LPAREN error RPAREN block.b {: return new SynchronizedStmt(new ParseName("unknown"), b); :} ; CatchClause catch_clause = CATCH LPAREN error RPAREN block.b {: return new CatchClause(new ParameterDeclaration(new Modifiers(new List()), new ParseName("unknown"), "unknown"), b); :} ; Expr primary_no_new_array = LPAREN error RPAREN {: return new ParExpr(new ParseName("unknown")); :} ; // TODO: class_instance_creation_expression Access method_invocation = name.n LPAREN error RPAREN {: if(n instanceof AbstractDot) { AbstractDot d = (AbstractDot)n; ParseName pn = (ParseName)d.extractLast(); MethodAccess m = new MethodAccess(pn.getID(), new List()); m.setStart(n.getStart()); // add location information m.setEnd(RPAREN.getEnd()); // add location information d.replaceLast(m); return d; } else { ParseName pn = (ParseName)n; return new MethodAccess(pn.getID(), new List()); } :} | primary.p DOT IDENTIFIER LPAREN error RPAREN {: String id = (String)IDENTIFIER.value; // extract token value MethodAccess m = new MethodAccess(id, new List()); m.setStart(IDENTIFIER.getStart()); // add location information m.setEnd(RPAREN.getEnd()); // add location information return p.qualifiesAccess(m); :} | SUPER DOT IDENTIFIER LPAREN error RPAREN {: String id = (String)IDENTIFIER.value; // extract token value SuperAccess s = new SuperAccess("super"); s.setStart(SUPER.getStart()); s.setEnd(SUPER.getEnd()); MethodAccess m = new MethodAccess(id, new List()); m.setStart(IDENTIFIER.getStart()); m.setEnd(RPAREN.getEnd()); return s.qualifiesAccess(m); :} | name.n DOT SUPER DOT IDENTIFIER LPAREN error RPAREN {: String id = (String)IDENTIFIER.value; // extract token value SuperAccess s = new SuperAccess("super"); s.setStart(SUPER.getStart()); s.setEnd(SUPER.getEnd()); MethodAccess m = new MethodAccess(id, new List()); m.setStart(IDENTIFIER.getStart()); m.setEnd(RPAREN.getEnd()); return n.qualifiesAccess(s).qualifiesAccess(m); :} ; Expr cast_expression = LPAREN error RPAREN unary_expression.e {: return new CastExpr(new ParseName("unknown"), e); :} ;