function advance(id, t) {
        switch (token.id) {
        case '(number)':
            if (nexttoken.id === '.') {
                warning(
"A dot following a number can be confused with a decimal point.", token);
            }
            break;
        case '-':
            if (nexttoken.id === '-' || nexttoken.id === '--') {
                warning("Confusing minusses.");
            }
            break;
        case '+':
            if (nexttoken.id === '+' || nexttoken.id === '++') {
                warning("Confusing plusses.");
            }
            break;
        }
        if (token.type === '(string)' || token.identifier) {
            anonname = token.value;
        }

        if (id && nexttoken.id !== id) {
            if (t) {
                if (nexttoken.id === '(end)') {
                    warning("Unmatched '{a}'.", t, t.id);
                } else {
                    warning(
"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
                            nexttoken, id, t.id, t.line, nexttoken.value);
                }
            } else if (nexttoken.type !== '(identifier)' ||
                            nexttoken.value !== id) {
                warning("Expected '{a}' and instead saw '{b}'.",
                        nexttoken, id, nexttoken.value);
            }
        }
        prevtoken = token;
        token = nexttoken;
        for (;;) {
            nexttoken = lookahead.shift() || lex.token();
            if (nexttoken.id === '(end)' || nexttoken.id === '(error)') {
                return;
            }
            if (nexttoken.type === 'special') {
                doOption();
            } else {
                if (nexttoken.id !== '(endline)') {
                    break;
                }
            }
        }
    }
function advance(id, t) {
        switch (token.id) {
        case '(number)':
            if (nexttoken.id === '.') {
                warning(
"A dot following a number can be confused with a decimal point.", token);
            }
            break;
        case '-':
            if (nexttoken.id === '-' || nexttoken.id === '--') {
                warning("Confusing minusses.");
            }
            break;
        case '+':
            if (nexttoken.id === '+' || nexttoken.id === '++') {
                warning("Confusing plusses.");
            }
            break;
        }
        if (token.type === '(string)' || token.identifier) {
            anonname = token.value;
        }

        if (id && nexttoken.id !== id) {
            if (t) {
                if (nexttoken.id === '(end)') {
                    warning("Unmatched '{a}'.", t, t.id);
                } else {
                    warning(
"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
                            nexttoken, id, t.id, t.line, nexttoken.value);
                }
            } else if (nexttoken.type !== '(identifier)' ||
                            nexttoken.value !== id) {
                warning("Expected '{a}' and instead saw '{b}'.",
                        nexttoken, id, nexttoken.value);
            }
        }
        prevtoken = token;
        token = nexttoken;
        for (;;) {
            nexttoken = lookahead.shift() || lex.token();
            if (nexttoken.id === '(end)' || nexttoken.id === '(error)') {
                return;
            }
            if (nexttoken.type === 'special') {
                doOption();
            } else {
                if (nexttoken.id !== '(endline)') {
                    break;
                }
            }
        }
    }
function advance ( id , t ) { switch ( token . id ) { case '(number)' : if ( nexttoken . id === '.' ) { warning ( "A dot following a number can be confused with a decimal point." , token ) ; } break ; case '-' : if ( nexttoken . id === '-' || nexttoken . id === '--' ) { warning ( "Confusing minusses." ) ; } break ; case '+' : if ( nexttoken . id === '+' || nexttoken . id === '++' ) { warning ( "Confusing plusses." ) ; } break ; } if ( token . type === '(string)' || token . identifier ) { anonname = token . value ; } if ( id && nexttoken . id !== id ) { if ( t ) { if ( nexttoken . id === '(end)' ) { warning ( "Unmatched '{a}'." , t , t . id ) ; } else { warning ( "Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'." , nexttoken , id , t . id , t . line , nexttoken . value ) ; } } else if ( nexttoken . type !== '(identifier)' || nexttoken . value !== id ) { warning ( "Expected '{a}' and instead saw '{b}'." , nexttoken , id , nexttoken . value ) ; } } prevtoken = token ; token = nexttoken ; for ( ; ; ) { nexttoken = lookahead . shift ( ) || lex . token ( ) ; if ( nexttoken . id === '(end)' || nexttoken . id === '(error)' ) { return ; } if ( nexttoken . type === 'special' ) { doOption ( ) ; } else { if ( nexttoken . id !== '(endline)' ) { break ; } } } }
Produce the next token. It looks for programming errors.
Produce the next token . It looks for programming errors .