Class: ToyLang::Scanner

Inherits:
Object
  • Object
show all
Defined in:
lib/toy_lang/scanner.rb

Constant Summary collapse

IDENTIFIER =

Tokens the scanner generates :return => for ‘return’ tokens :def => for ‘def’ tokens :number => for regexp ‘d+’ :id => for ‘[a-z]+’ :open_block => for ‘:close_block => for ‘’ :eof => for end of file

/\A[a-z]+/
WHITESPACE =
/\A\s+/
LANGUAGE_TOKENS =
{
  number: reg_exp('\d+'),
  open_block: escaped_reg_exp('{'),
  close_block: escaped_reg_exp('}'),
  open_parentheses: escaped_reg_exp('('),
  close_parentheses: escaped_reg_exp(')'),
  comma: reg_exp(',')
}
RESERVED_WORDS =
%w[return def]

Instance Method Summary collapse

Instance Method Details

#get_next_tokenObject



50
51
52
53
54
55
56
# File 'lib/toy_lang/scanner.rb', line 50

def get_next_token
  if @token_list.empty?
    consume_token
  else
    @token_list.shift
  end
end

#look_ahead(number_of_tokens = 1) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/toy_lang/scanner.rb', line 58

def look_ahead(number_of_tokens = 1)
  end_of_file_met = false
  while @token_list.size < number_of_tokens
    throw :scanner_exception if end_of_file_met
    token = consume_token
    @token_list << token
    end_of_file_met = token.is? :eof
  end
  @token_list[number_of_tokens - 1]
end

#set_program(program) ⇒ Object



45
46
47
48
# File 'lib/toy_lang/scanner.rb', line 45

def set_program(program)
  @program = program
  @token_list =[] # used to keep tokens in look_aheads
end