Class: RedParse::RuleSet
Constant Summary
collapse
- @@FFS_TABLE =
[nil]
Instance Method Summary
collapse
#LEFT, #LEFT_NO_LOOKING, #LOOKAHEAD_CLASSES, #STACKABLE_CLASSES, #TOS_CLASSES, #juice, #sc_juice
Constructor Details
#initialize(rules) ⇒ RuleSet
Returns a new instance of RuleSet.
44
45
46
47
48
49
50
|
# File 'lib/redparse/compile.rb', line 44
def initialize(rules)
@rules=rules.reverse
@maxmask=(1<<@rules.size)-1
@subclasses_of=child_relations_among(*STACKABLE_CLASSES())
end
|
Instance Method Details
#[](i) ⇒ Object
149
150
151
|
# File 'lib/redparse/compile.rb', line 149
def [](i)
@rules[i]
end
|
#each_rule(mask = @maxmask) ⇒ Object
77
78
79
80
81
|
# File 'lib/redparse/compile.rb', line 77
def each_rule(mask=-1)
@rules.each_with_index{|r,i|
yield r,i if mask&(1<<i)
}
end
|
#mask2rules(mask) ⇒ Object
60
61
62
63
64
65
66
|
# File 'lib/redparse/compile.rb', line 60
def mask2rules(mask)
rules=[]
@rules.each_with_index{|r,i|
rules<<r if mask&(1<<i)
}
return rules
end
|
#rb_ffs(mask) ⇒ Object
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/redparse/compile.rb', line 96
def rb_ffs(mask)
chunks=0
until mask.zero?
result=@@FFS_TABLE[mask&0xFF]
return result+(chunks<<3) if result
chunks+=1
mask>>=8
end
return 0
end
|
#rules2mask(rules) ⇒ Object
52
53
54
55
56
57
58
|
# File 'lib/redparse/compile.rb', line 52
def rules2mask(rules)
mask=0
@rules.each_with_index{|r,i|
mask |= 1<<i if rules.include? r
}
return mask
end
|