CodeBERT-Attack / preprocess / cparser / ccode.py
ccode.py
Raw
# -*- coding: utf-8 -*-
"""
Created on Fri Sept 20 11:45:12 2019

@author: DrLC
"""

import copy

from .myparser import TreeNode, SymTab
from .myparser import getParsingTree, getSymbolTable
from .error import SyntaxError

class CCode(object):

    def __init__(self, _input):

        if isinstance(_input, str):
            root = getParsingTree(_input)
            symtab = getSymbolTable(root)
        elif isinstance(_input, TreeNode):
            root = _input
            symtab = getSymbolTable(_input)
        else:
            raise(TypeError("Invalid _input: "+str(_input)
                +".\nPlease use valid string or TreeNode type."))
        self._root = root
        self._syms = symtab
        self._tokens = self._getToken(self._root)

    def getParsingTree(self):

        return copy.deepcopy(self._root)

    def getSymbolTable(self):

        return copy.deepcopy(self._syms)
    
    def getTokenSeq(self):
        
        return self._tokens
    
    def _getToken(self, node):
        
        if node.getType() == '#':
            return [node.getValue().strip()]
        ret = []
        for c in node.getChildren():
            ret += self._getToken(c)
        return ret