本文整理汇总了Python中rule.Rule.last方法的典型用法代码示例。如果您正苦于以下问题:Python Rule.last方法的具体用法?Python Rule.last怎么用?Python Rule.last使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类rule.Rule
的用法示例。
在下文中一共展示了Rule.last方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from rule import Rule [as 别名]
# 或者: from rule.Rule import last [as 别名]
def __init__(self):
firstRule = Rule()
i = 0
# reset number of rules and hashtable
Rule.numRules = 0
#symbol.theDigrams.clear()
# loop until done
done = False
input_string = "abracadabraarbadacarba"
for i in input_string:
#print "before: " + str(Rule.numRules)
firstRule.last().insertAfter(Terminal(i))
#print "middle: " + str(Rule.numRules)
firstRule.last().p.check()
#print "after: " + str(Rule.numRules)
print firstRule.getRules()
print firstRule.theGuard.n
print firstRule.theGuard.n.value
print firstRule.theGuard.p.value
示例2: Grammar
# 需要导入模块: from rule import Rule [as 别名]
# 或者: from rule.Rule import last [as 别名]
class Grammar(object):
"""docstring for Grammar"""
def __init__(self):
super(Grammar, self).__init__()
self.digram_index = {}
self.root_production = Rule(self)
def train_string(self, string):
"""docstring for train_string"""
input_sequence = [c for c in string]
if (0 < len(input_sequence)):
self.root_production.last().insert_after(Symbol.factory(self, input_sequence.pop(0)))
while (0 < len(input_sequence)):
self.root_production.last().insert_after(Symbol.factory(self, input_sequence.pop(0)))
match = self.get_index(self.root_production.last().prev)
if not match:
self.add_index(self.root_production.last().prev)
elif match.next != self.root_production.last().prev:
self.root_production.last().prev.process_match(match)
def add_index(self, digram):
"""docstring for index"""
self.digram_index[digram.hash_value()] = digram
def get_index(self, digram):
"""docstring for get"""
return self.digram_index.get(digram.hash_value())
def clear_index(self, digram):
"""docstring for clear_index"""
if self.digram_index.get(digram.hash_value()) == digram:
self.digram_index[digram.hash_value()] = None
def print_grammar(self):
"""docstring for print_grammar"""
output_array = []
rule_set = [self.root_production]
i = 0
for rule in rule_set:
output_array.append("%s --(%d)--> " % (i, rule.reference_count))
line_length = rule.print_rule(rule_set, output_array, len("%s --(%d)--> " % (i, rule.reference_count)))
if i > 0:
output_array.append(' ' * (57 - line_length))
line_length = rule.print_rule_expansion(rule_set, output_array, line_length)
output_array.append('\n');
i += 1
return "".join(output_array)
示例3: process_match
# 需要导入模块: from rule import Rule [as 别名]
# 或者: from rule.Rule import last [as 别名]
def process_match(self, match):
"""Deal with a matching digram"""
from rule import Rule
rule = None
if (match.prev.is_guard() and match.next.next.is_guard()):
# reuse an existing rule
rule = match.prev.rule
self.substitute(rule)
self.prev.propagate_change()
else:
# create a new rule
rule = Rule(self.grammar)
rule.last().insert_after(Symbol.factory(self.grammar, self))
rule.last().insert_after(Symbol.factory(self.grammar, self.next))
self.grammar.add_index(rule.first())
match.substitute(rule)
match.prev.propagate_change()
self.substitute(rule)
self.prev.propagate_change()
# Check for an under-used rule
if (NonTerminal == type(rule.first()) and (rule.first().rule.reference_count == 1)):
rule.first().expand()