class ExpressionTokenizer::Status
Public Class Methods
new(pos,tokenizer,args={})
click to toggle source
# File libs/lexer.rb, line 796 def initialize(pos,tokenizer,args={}) @named_vars=[:close, :nothing_seen, :delim, :have_delim, :have_item, :item_seen, :delim_seen] @tokenizer=tokenizer @stat_hash={} @named_vars.each {|i| @stat_hash[i]=nil} #preload for debugging self.have_item = self.have_delim = self.delim_seen = false @stat_hash.merge!(args) #args overwrites @stat_hash where keys are equal self.item_seen=@stat_hash[:preload].nil? #If we expect to find a closing element, the delimiter will be a comma #Otherwise we'll discover it later self.delim=:comma if self.delim.nil? && !self.close.nil? self.skip_until_close=self.skip_until_close==true || false #enforce boolean result end
Public Instance Methods
[](key)
click to toggle source
# File libs/lexer.rb, line 841 def [](key) @stat_hash[key] end
[]=(key,value)
click to toggle source
# File libs/lexer.rb, line 837 def []=(key,value) @stat_hash[key]=value end
args()
click to toggle source
# File libs/lexer.rb, line 816 def args hash={} vars=instance_variables vars.delete("@tokenizer") vars.delete("@stat_hash") vars.delete("@named_vars") vars.each do |i| hash.merge!(i.split("@")[-1].to_sym=>instance_variable_get(i)) end hash.merge!(@stat_hash) end
delimiter(pos)
click to toggle source
# File libs/lexer.rb, line 878 def delimiter(pos) if @tokenizer.of_type?(pos,:comma) @tokenizer.invalid_character(pos,:error=>WhitespaceExpected) if self.delim==:whitespace @tokenizer.invalid_character(pos,:error=>ItemExpected) if self.delim==:comma and self.have_delim elsif @tokenizer.of_type?(pos,:whitespace) self.delim=:whitespace if self.delim.nil? && self.seen_item else @tokenizer.invalid_character(pos) end self.delim_seen=true self.have_item=false self.have_delim=true end
inspect()
click to toggle source
# File libs/lexer.rb, line 833 def inspect "#<#{self.class}:0x#{self.__id__.to_s(16)} " + args.inspect + ">" end
item(pos)
click to toggle source
# File libs/lexer.rb, line 864 def item(pos) #set the delimiter to whitespace if we've never seen a delimiter but have an item if self.delim.nil? && self.have_item && !self.delim_seen self.delim=:whitespace self.delim_seen=true end @tokenizer.invalid_character(pos, :error=>DelimiterExpected) if self.have_item && self.delim!=:whitespace && !@tokenizer.of_type?(pos,[:open,:close]) self.item_seen=true self.have_item=true self.have_delim=false end
merge(other_hash)
click to toggle source
# File libs/lexer.rb, line 828 def merge(other_hash) raise ZError.new("Hash Value required",:retry=>false) if other_hash.class!=Hash args.merge(other_hash) end
method_missing(sym,*args)
click to toggle source
Calls superclass method
# File libs/lexer.rb, line 845 def method_missing(sym,*args) key=sym.to_s.split("=")[0].intern have_equal=(key.to_s!=sym.to_s) val=@stat_hash[key] return val if val && !have_equal && args.empty? if have_equal @stat_hash[key]=*args return *args end #just to be sure let's kick this to the super class, otherwise return nil begin return super(sym,args) rescue NoMethodError return nil end end