Module: RedParse::Reducer
- Included in:
- RedParse
- Defined in:
- lib/redparse.rb,
lib/redparse/compile.rb
Constant Summary collapse
- @@rulesets =
{}
- @@class_narrowerses =
{}
Instance Method Summary collapse
Instance Method Details
#compile(recompile = false) ⇒ Object
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
# File 'lib/redparse/compile.rb', line 250 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
279 280 281 282 283 284 285 286 287 288 289 290 291 |
# File 'lib/redparse/compile.rb', line 279 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 |