private void statement() throws Exception
    {
        if(scan.sym == Token.let) {
            scan.next();
            assignment_rest();
        } else if(scan.sym == Token.call) {
            scan.next();
            funcCall_rest();
        } else if(scan.sym == Token.if_t) {
            scan.next();
            ifStatement_rest();
        } else if(scan.sym == Token.while_t) {
            scan.next();
            whileStatement_rest();
        } else if(scan.sym == Token.return_t) {
            // after a return statement, you can eliminate any
            // following code in the stat sequence.
            scan.next();
            returnStatement_rest();
        } else {
            throw new Exception("Statement: unrecognized statement type");
        }
    }