Пример #1
0
class RuleInterpreter(Interpreter):
    norule = Node()
    
    def __init__(self, rule):        
        self.rule = Node()
        self.appendrule(rule)
        Interpreter.__init__(self)
    
    def appendrule(self, rule):
        shorp = Shorp()
        shorp.add(rule)
        self.rule.addChilds(shorp.parse().getChilds(), '+')
    
    def matchrule(self, name):
        rules = self.rule.getChilds()
        matchr = None
        for r in rules:
            if r.getAttr('+') == name:
                matchr = r
                break
            elif r.getAttr('+') == '':
                matchr = r
        return matchr
        
    def interpretimpl(self, node, intent=-1):
        if intent<0:
            rule = self.norule
            ruletpl = ''
        else:
            rulename = node.getAttr('+')
            rule = self.matchrule(rulename)
            if rule == None: rule = self.norule
            ruletpl = rule.getAttr(':')
        
        node = self.normalize(node, rule)
        return getattr(self, 'rule_%s'%ruletpl)(node, rule, intent)
    
    def rule_(self, node, rule, intent):
        text = ''
        childs = node.getChilds()
        
        for child in childs:
            text += self.interpret(child, intent+1)        
        return text
    
    def normalize(self, node, rule):
        return node
Пример #2
0
 def __init__(self, rule):        
     self.rule = Node()
     self.appendrule(rule)
     Interpreter.__init__(self)