//------------------------------------------------------------------- // 8. statement = BEGIN block END // | lvalue ASSIGN expr // | READ LPAREN idList RPAREN // | WRITE LPAREN exprList RPAREN // | IF expr THEN statement (ELSE statement)? // | WHILE expr DO statement // | EXIT //------------------------------------------------------------------- public static void statement() { //statement = BEGIN block END if (token.type.name().equals("beginTK")) { block(); if (token.type.name().equals("endTK")) { } else { error("END keyword expected after block"); } // statement = lvalue ASSIGN expr // lvalue = ID args } else if (token.type.name().equals("identifierTK")) { lvalue(); if (token.type.name().equals("assignTK")) { expr(); } else { error("Assignment operator expected after lvalue"); } // statement = READ LPAREN idList RPAREN } else if (token.type.name().equals("readTK")) { if (token.type.name().equals("lparenTK")) { idList(); if (token.type.name().equals("rparenTK")) { } else { error("Right parenthesis expected after idList in READ statement"); } } else { error("Left parenthesis expected before idList in READ statement"); } // statement = WRITE LPAREN exprList RPAREN } else if (token.type.name().equals("writeTK")) { if (token.type.name().equals("lparenTK")) { exprList(); if (token.type.name().equals("rparenTK")) { } else { error("Right parenthesis expected after exprList in WRITE statement"); } } else { error("Left parenthesis expected before exprList in WRITE statement"); } //statement = IF expr THEN statement (ELSE statement)? } else if (token.type.name().equals("ifTK")) { expr(); if (token.type.name().equals("thenTK")) { statement(); if (token.type.name().equals("elseTK")) { statement(); } } else { error("THEN keyword expected after IF expression"); } //statement = WHILE expr DO statement } else if (token.type.name().equals("whileTK")) { expr(); if (token.type.name().equals("doTK")) { statement(); } else { error("DO keyword expected after WHILE expression"); } //statement = EXIT } else if (token.type.name().equals("exitTK")) { } }
Standard input is empty
//------------------------------------------------------------------- // 8. statement = BEGIN block END // | lvalue ASSIGN expr // | READ LPAREN idList RPAREN // | WRITE LPAREN exprList RPAREN // | IF expr THEN statement (ELSE statement)? // | WHILE expr DO statement // | EXIT //------------------------------------------------------------------- public static void statement() { //statement = BEGIN block END if (token.type.name().equals("beginTK")) { token = next(); block(); if (token.type.name().equals("endTK")) { token = next(); } else { error("END keyword expected after block"); } // statement = lvalue ASSIGN expr // lvalue = ID args } else if (token.type.name().equals("identifierTK")) { lvalue(); if (token.type.name().equals("assignTK")) { token = next(); expr(); } else { error("Assignment operator expected after lvalue"); } // statement = READ LPAREN idList RPAREN } else if (token.type.name().equals("readTK")) { token = next(); if (token.type.name().equals("lparenTK")) { token = next(); idList(); if (token.type.name().equals("rparenTK")) { token = next(); } else { error("Right parenthesis expected after idList in READ statement"); } } else { error("Left parenthesis expected before idList in READ statement"); } // statement = WRITE LPAREN exprList RPAREN } else if (token.type.name().equals("writeTK")) { token = next(); if (token.type.name().equals("lparenTK")) { token = next(); exprList(); if (token.type.name().equals("rparenTK")) { token = next(); } else { error("Right parenthesis expected after exprList in WRITE statement"); } } else { error("Left parenthesis expected before exprList in WRITE statement"); } //statement = IF expr THEN statement (ELSE statement)? } else if (token.type.name().equals("ifTK")) { token = next(); expr(); if (token.type.name().equals("thenTK")) { token = next(); statement(); if (token.type.name().equals("elseTK")) { token = next(); statement(); } } else { error("THEN keyword expected after IF expression"); } //statement = WHILE expr DO statement } else if (token.type.name().equals("whileTK")) { token = next(); expr(); if (token.type.name().equals("doTK")) { token = next(); statement(); } else { error("DO keyword expected after WHILE expression"); } //statement = EXIT } else if (token.type.name().equals("exitTK")) { token = next(); } }