 
 # Look at a tag in the current token stream.
 lex::tag: (index, tag) ->
-  return unless tok: @tokens[@tokens.length - (index or 1)]
+  return unless tok: @prev(index)
   return tok[0]: tag if tag?
   tok[0]
 
 # Look at a value in the current token stream.
 lex::value: (index, val) ->
-  return unless tok: @tokens[@tokens.length - (index or 1)]
+  return unless tok: @prev(index)
   return tok[1]: val if val?
   tok[1]
+
+# Look at a previous token.
+lex::prev: (index) ->
+  @tokens[@tokens.length - (index or 1)]
 
 # Count the occurences of a character in a string.
 lex::count: (string, letter) ->

  @line += indent.match(MULTILINER).length
  @i    += indent.length
  next_character: @chunk.match(MULTI_DENT)[4]
  prev: @tokens[@tokens.length - 2]
  no_newlines: next_character is '.' or (@value() and @value().match(NO_NEWLINE) and prev and (prev[0] isnt '.') and not @value().match(CODE))
  return @suppress_newlines(indent) if no_newlines
  size: indent.match(LAST_DENTS).reverse()[0].match(LAST_DENT)[1].length

    throw new Error('SyntaxError: Reserved word "' + @value() + '" on line ' + @line + ' can\'t be assigned') if JS_FORBIDDEN.indexOf(@value()) >= 0
  tag: 'TERMINATOR' if value == ';'

  if CALLABLE.indexOf(@tag()) >= 0 and (not @prev() or not @prev().spaced)
    tag: 'CALL_START'  if value is '('
    tag: 'INDEX_START' if value is '['
  @token tag, value
