示例#1
0
 def add_property(self, name, value):
     
     prop = AstNode('property')
     prop.addChild(AstNode('name', name))
     prop.addChild(AstNode('value', value))
     
     self.addChild(prop)
示例#2
0
def _branch_transform(astNode):
    
    res = AstNode("branch")
    
    for child in astNode.getChildren():
        child.setId("")
        res.addChild(child)
    
    return res
示例#3
0
def _group_transform(astNode):
    
    res = AstNode("group")
    
    for child in astNode.getChildrenById('branch'):
        child.setId('')
        res.addChild(child)

    return res
示例#4
0
def _comment_transform(astNode):
    
    line = astNode.getChildById('line')
    if line:
        res = AstNode('line-comment')
        begin = AstNode('begin', astNode.getChildById('begin').getText())
        res.addChild(begin)
    else:
        res = AstNode('block-comment')
        begin = AstNode('begin', astNode.getChildById('begin').getText())
        res.addChild(begin)
        end = AstNode('end', astNode.getChildById('end').getText())
        res.addChild(end)
        
    return res
示例#5
0
 def transform(self, astNode):
     
     res = AstNode('meta-grammar')
     
     commentNodes = astNode.getChildrenById('comment-style')
     if commentNodes:
         node = AstNode('comment-styles')
         res.addChild(node)
         line = None
         block = None
         for cnode in commentNodes:
             if line and block:
                 break
             if line is None and cnode.getName() == 'line-comment':
                 cnode.setId('')
                 node.addChild(cnode)
                 line = cnode
                 continue
             if block is None and cnode.getName() == 'block-comment':
                 cnode.setId('')
                 node.addChild(cnode)
                 block = cnode
                 
     enableNodes = astNode.getChildrenById('enable')
     if enableNodes:
         node = AstNode('enable')
         for item in enableNodes:
             node.addChild(item)
         res.addChild(node)
                     
     tokensNodes = astNode.getChildrenById('tokens')
     if tokensNodes:
         node = AstNode('tokens')
         res.addChild(node)
         for tn in tokensNodes:
             for t in tn.getChildren():
                 node.addChild(t)
                 
     ruleNodes = astNode.getChildrenById('rule')
     if ruleNodes:
         node = AstNode('rules')
         res.addChild(node)
         for rn in ruleNodes:
             rn.setId('')
             node.addChild(rn)
     
     return res
示例#6
0
def _branch_elem_transform(astNode):
    
    res = AstNode('element')
    
    for child in astNode.getChildren():
        id_ = child.getId()
        if id_ == 'token':
            node = AstNode('token-id', child.getText())
            res.addChild(node)
        elif id_ == 'rule': 
            node = AstNode('rule-id', child.getText())
            res.addChild(node)
        elif id_ == 'keyword': 
            node = AstNode('keyword-text', child.getText()[1:-1])
            res.addChild(node)
        elif id_ == 'group':
            child.setId('') 
            res.addChild(child)
        elif id_ == 'id':
            node = AstNode('id', child.getText())
            res.addChild(node)
        elif id_ == 'mult':
            child.setId('') 
            res.addChild(child)
    
    return res