Class: Aurum::Lexer
- Inherits:
-
Object
- Object
- Aurum::Lexer
- Defined in:
- lib/aurum/engine.rb
Instance Method Summary collapse
- #goto(state, input) ⇒ Object
-
#initialize(table, accepts, lexical_states, input) ⇒ Lexer
constructor
A new instance of Lexer.
- #next_symbol ⇒ Object
- #pushback(symbol) ⇒ Object
- #recognize(token) ⇒ Object
- #shift_to(state) ⇒ Object
Constructor Details
#initialize(table, accepts, lexical_states, input) ⇒ Lexer
Returns a new instance of Lexer.
32 33 34 35 |
# File 'lib/aurum/engine.rb', line 32 def initialize table, accepts, lexical_states, input @table, @accepts, @lexical_states, @input = table, accepts, lexical_states, input shift_to :initial end |
Instance Method Details
#goto(state, input) ⇒ Object
63 64 65 66 67 |
# File 'lib/aurum/engine.rb', line 63 def goto state, input return nil unless input next_state = @table[state].find {|tran| tran.symbols.include?(input)} next_state ? next_state.destination : nil end |
#next_symbol ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/aurum/engine.rb', line 37 def next_symbol return Aurum::EOF if @input.eof? @recognized, lexeme, @pushback_symbol = @pushback_symbol, '', nil until @recognized next_state, char = @start_state, nil while next_state lexeme << char if char state, char = next_state, @input.get_char next_state = goto state, char end @input.pushback char return Unknown unless actions = @accepts[state] if actions.first == IgnoreAction lexeme = '' else actions.first.execute self, lexeme end end @recognized.value = lexeme unless @recognized.value @recognized end |
#pushback(symbol) ⇒ Object
59 60 61 |
# File 'lib/aurum/engine.rb', line 59 def pushback symbol @pushback_symbol = symbol end |
#recognize(token) ⇒ Object
73 74 75 |
# File 'lib/aurum/engine.rb', line 73 def recognize token @recognized = Aurum::Symbol.new token, true end |
#shift_to(state) ⇒ Object
69 70 71 |
# File 'lib/aurum/engine.rb', line 69 def shift_to state @start_state = goto 0, -@lexical_states.index(state)-1 end |