Module: RedParse::Reducer
- Included in:
- RedParse
- Defined in:
- lib/redparse.rb,
lib/miniredparse.rb,
lib/redparse/compile.rb
Constant Summary collapse
- @@rulesets =
{}
- @@class_narrowerses =
{}
Instance Method Summary collapse
Instance Method Details
#compile(recompile = false) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# 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 ⇒ Object
187 188 189 190 191 192 193 194 195 196 197 198 199 |
# 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 |