nl_tokens: Produce the next token . It looks for programming errors .
pl_tokens: 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 . <mask> ) ; } } 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 ; } } } }