class SLF0::Parser
Public Class Methods
new(class_deserializer:)
click to toggle source
# File lib/slf0/parser.rb, line 8 def initialize(class_deserializer:) @class_deserializer = class_deserializer end
Public Instance Methods
make_stream(tokens, class_deserializer)
click to toggle source
# File lib/slf0/parser.rb, line 34 def make_stream(tokens, class_deserializer) SLF0::Token::Stream.new(tokens, class_deserializer: class_deserializer) end
parse!(io)
click to toggle source
# File lib/slf0/parser.rb, line 12 def parse!(io) tokens = Tokenizer.tokenize(io) parse_tokens!(tokens) end
parse_tokens!(tokens)
click to toggle source
# File lib/slf0/parser.rb, line 18 def parse_tokens!(tokens) class_names = tokens.grep(SLF0::Token::ClassName).map(&:value) tokens.reject! { |t| t.is_a? SLF0::Token::ClassName } values = [] stream = make_stream(tokens, [nil] + class_names.map { |n| [n, @class_deserializer[n]] }) until tokens.empty? values << case tokens.first when SLF0::Token::ClassNameRef stream.object else tokens.shift.value end end values end