コード例 #1
0
ファイル: statements.py プロジェクト: ctz/lighthouse
 def from_xml(t):
     s = Switch()
     if t.get('location'):
         s.location = Location(t.get('location'))
     s.expr = expression.expression_from_xml(descend_one(t.find('index')))
     if t.find('default') is not None:
       s.default = int(t.find('default').get('id'))
     for c in t.findall('case'):
       if len(c.getchildren()) == 1:
         k = descend_one(c)
         assert k.tag == 'exact', 'strange case label'
         s.mapping[constant.convert(descend_one(k))] = int(c.get('id'))
       else:
         assert len(c.getchildren()) == 2, 'strange case label'
         low, high = c.getchildren()
         assert low.tag == 'low-bound'
         assert high.tag == 'high-bound'
         low_const, high_const = constant.convert(descend_one(low)).get_value(), constant.convert(descend_one(high)).get_value()
         for x in range(low_const, high_const + 1):
             s.mapping[x] = int(c.get('id'))
     return s
コード例 #2
0
ファイル: expression.py プロジェクト: ctz/lighthouse
def expression_from_xml(t):
    if t.tag in valid_lvalues:
        return result_from_xml(t)
    if t.tag in ('constant',):
        return constant.convert(t)
    if t.tag in binary_operators.keys():
        return BinaryOp(binary_operators[t.tag])
    if t.tag in unary_operators.keys():
        return UnaryOp(unary_operators[t.tag])
    if t.tag == 'addr-of':
        return AddrOf(t)
    if t.tag == 'void':
        return Void()
    if t.tag == 'function':
        return expression_from_xml(descend_one(t))

    print 'warn: tag %s unhandled, returning dummy bound' % (t.tag)
    dump(t)
    return Bound()