module RedParse::Reducer
Public Instance Methods
compile(recompile=false)
click to toggle source
# File lib/redparse/compile.rb, line 158 def compile(recompile=false) klass=self.class #use cached result if available if @@rulesets[klass] and !recompile @ruleset=@@rulesets[klass] @class_narrowers=@@class_narrowerses[klass] return end #actual rule compilation @ruleset=RuleSet.new @rules @class_narrowers=[tos=Hash.new(0),la=Hash.new(0)] @ruleset.each_rule{|r,i| @ruleset.LOOKAHEAD_CLASSES(r).each{|klass2| la[klass2] |= 1<<i } @ruleset.TOS_CLASSES(r).each{|klass2| tos[klass2] |= 1<<i } } #save result to cache if not too dynamic if !recompile @@rulesets[klass]=@ruleset @@class_narrowerses[klass]=@class_narrowers end end
new_reduce()
click to toggle source
# File lib/redparse/compile.rb, line 187 def new_reduce # mask=-1 # (-1).downto(-@class_narrowers.size){|i| # mask &= @class_narrowers[i][@stack[i].class] # } mask= @class_narrowers[-1][@stack[-1].class]& @class_narrowers[-2][@stack[-2].class] @ruleset.each_rule(mask){|r,i| res=evaluate(r) and return res } return false end