Class: ToyLang::Scanner
- Inherits:
-
Object
- Object
- ToyLang::Scanner
- 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_token ⇒ Object
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 |