Parent

Class/Module Index [+]

Quicksearch

ClsRuby::Lexers::Lexer

Лексический анализатор, который объединяет в одну лексему последовательность токенов :tok_space и :tok_nonspace.

Constants

EOF

Public Class Methods

new( stream, stream_name ) click to toggle source
# File lib/cls-ruby/lexers/lexer.rb, line 19
def initialize( stream, stream_name )
  @classifier = CharClassifier.new( stream, stream_name )

  # Содержит последний извлеченный из входного потока токен,
  # который не является :tok_space или :tok_nonspace.
  # Если равен nil, то из потока нужно извлекать следующий символ.
  @last_unprocessed_pair = nil
end

Public Instance Methods

line_no() click to toggle source
# File lib/cls-ruby/lexers/lexer.rb, line 29
def line_no; @classifier.line_no; end
next() click to toggle source

Извлечение очередной лексемы.

Возвращает значение EOF, если достигнут конец потока.

# File lib/cls-ruby/lexers/lexer.rb, line 34
def next
  pair = get_next_pair
  if :tok_space == pair[ 1 ] || :tok_nonspace == pair[ 1 ]
    union_sequence( pair )
  else
    pair
  end
end
stream_name() click to toggle source
# File lib/cls-ruby/lexers/lexer.rb, line 28
def stream_name; @classifier.stream_name; end

Private Instance Methods

get_next_pair() click to toggle source

Извлечение очередной лексемы из потока.

Если есть необработанная лексема в @last_unprocessed_pair, то возвращается она без использования потока.

# File lib/cls-ruby/lexers/lexer.rb, line 48
def get_next_pair
  n = @last_unprocessed_pair; @last_unprocessed_pair = nil
  n = @classifier.next unless n
  n
end
union_sequence( first ) click to toggle source

Объединение всех последовательно идущих лексем в одну, если они совпадают с первой лексемой.

# File lib/cls-ruby/lexers/lexer.rb, line 56
def union_sequence( first )
  result = first.dup
  while EOF != ( n = @classifier.next )
    if result[ 1 ] == n[ 1 ]
      result[ 0 ] << n[ 0 ]
    else
      @last_unprocessed_pair = n
      break
    end
  end

  result
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.