当前位置: 首页>>代码示例>>Python>>正文


Python c_ast.Decl方法代码示例

本文整理汇总了Python中pycparser.c_ast.Decl方法的典型用法代码示例。如果您正苦于以下问题:Python c_ast.Decl方法的具体用法?Python c_ast.Decl怎么用?Python c_ast.Decl使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在pycparser.c_ast的用法示例。


在下文中一共展示了c_ast.Decl方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: explain_c_declaration

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def explain_c_declaration(c_decl):
    """ Parses the declaration in c_decl and returns a text
        explanation as a string.

        The last external node of the string is used, to allow
        earlier typedefs for used types.
    """
    parser = c_parser.CParser()

    try:
        node = parser.parse(c_decl, filename='<stdin>')
    except c_parser.ParseError:
        e = sys.exc_info()[1]
        return "Parse error:" + str(e)

    if (not isinstance(node, c_ast.FileAST) or
        not isinstance(node.ext[-1], c_ast.Decl)
        ):
        return "Not a valid declaration"

    return _explain_decl_node(node.ext[-1]) 
开发者ID:johncsnyder,项目名称:SwiftKitten,代码行数:23,代码来源:cdecl.py

示例2: read_ptrace_h

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def read_ptrace_h(path, include_path):
    text = get_header_text(path, include_path)
    parser = ext_c_parser.GnuCParser()
    fileast = parser.parse(text, path)

    if not isinstance(fileast, c_ast.FileAST):
        die('could not parse user.h')

    output = ['\n']

    for decl in fileast.ext:
        if (not isinstance(decl, c_ast.Decl) or
                not isinstance(decl.type, c_ast.Enum)):
            continue

        for item in decl.type.values.enumerators:
            if item.name.startswith('PTRACE_'):
                output.append('{} = {}'.format(
                    item.name, render_const(item.value)))

    typedefs = parse_typedefs(fileast)
    structs = {'__ptrace_peeksiginfo_args'}
    output.extend(parse_structs(fileast, structs, typedefs))

    return output 
开发者ID:pinterest,项目名称:ptracer,代码行数:27,代码来源:extract_ptrace_constants.py

示例3: parse_structs

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def parse_structs(fileast, structs, typedefs):
    output = []

    for decl in fileast.ext:
        if ((not isinstance(decl, c_ast.Decl) or
                not isinstance(decl.type, c_ast.Struct)) and
                not isinstance(decl, c_ast.Typedef)):
            continue

        struct, struct_name = get_struct_and_name(decl)
        if struct_name not in structs:
            continue

        definitions = parse_struct(decl, typedefs)

        for name, base, fields in definitions:
            output.append('\n\nclass {}({}):'.format(name, base))
            output.append('    _fields_ = (')
            for field_name, field_type in fields:
                output.append('        ({!r}, {}),'.format(
                    field_name, field_type))
            output.append('    )')

    return output 
开发者ID:pinterest,项目名称:ptracer,代码行数:26,代码来源:extract_ptrace_constants.py

示例4: _explain_decl_node

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def _explain_decl_node(decl_node):
    """ Receives a c_ast.Decl note and returns its explanation in
        English.
    """
    storage = ' '.join(decl_node.storage) + ' ' if decl_node.storage else ''

    return (decl_node.name +
            " is a " +
            storage +
            _explain_type(decl_node.type)) 
开发者ID:johncsnyder,项目名称:SwiftKitten,代码行数:12,代码来源:cdecl.py

示例5: _explain_type

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def _explain_type(decl):
    """ Recursively explains a type decl node
    """
    typ = type(decl)

    if typ == c_ast.TypeDecl:
        quals = ' '.join(decl.quals) + ' ' if decl.quals else ''
        return quals + _explain_type(decl.type)
    elif typ == c_ast.Typename or typ == c_ast.Decl:
        return _explain_type(decl.type)
    elif typ == c_ast.IdentifierType:
        return ' '.join(decl.names)
    elif typ == c_ast.PtrDecl:
        quals = ' '.join(decl.quals) + ' ' if decl.quals else ''
        return quals + 'pointer to ' + _explain_type(decl.type)
    elif typ == c_ast.ArrayDecl:
        arr = 'array'
        if decl.dim: arr += '[%s]' % decl.dim.value

        return arr + " of " + _explain_type(decl.type)

    elif typ == c_ast.FuncDecl:
        if decl.args:
            params = [_explain_type(param) for param in decl.args.params]
            args = ', '.join(params)
        else:
            args = ''

        return ('function(%s) returning ' % (args) +
                _explain_type(decl.type)) 
开发者ID:johncsnyder,项目名称:SwiftKitten,代码行数:32,代码来源:cdecl.py

示例6: ast_to_typeid_decl

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def ast_to_typeid_decl(self, ast):
        """Return the CTypeBase of a Decl ast"""
        return self.ast_to_typeid(ast.type) 
开发者ID:cea-sec,项目名称:miasm,代码行数:5,代码来源:ctypesmngr.py

示例7: ast_parse_decl

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def ast_parse_decl(self, ast):
        """Parse ast Decl"""
        return self.ast_parse_declaration(ast.type) 
开发者ID:cea-sec,项目名称:miasm,代码行数:5,代码来源:ctypesmngr.py

示例8: parse_function

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def parse_function(fn: FuncDecl) -> Function:
    params: List[Param] = []
    is_variadic = False
    has_void = False
    if fn.args:
        for arg in fn.args.params:
            if isinstance(arg, ca.EllipsisParam):
                is_variadic = True
            elif isinstance(arg, ca.Decl):
                params.append(Param(type=arg.type, name=arg.name))
            elif isinstance(arg, ca.ID):
                raise DecompFailure(
                    "K&R-style function header is not supported: " + to_c(fn)
                )
            else:
                assert isinstance(arg, ca.Typename)
                if is_void(arg.type):
                    has_void = True
                else:
                    params.append(Param(type=arg.type, name=None))
    maybe_params: Optional[List[Param]] = params
    if not params and not has_void and not is_variadic:
        # Function declaration without a parameter list
        maybe_params = None
    ret_type = None if is_void(fn.type) else fn.type
    return Function(ret_type=ret_type, params=maybe_params, is_variadic=is_variadic) 
开发者ID:matt-kempster,项目名称:mips_to_c,代码行数:28,代码来源:c_types.py

示例9: set_decl_name

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def set_decl_name(decl: ca.Decl) -> None:
    name = decl.name
    type = decl.type
    while not isinstance(type, TypeDecl):
        type = type.type
    type.declname = name 
开发者ID:matt-kempster,项目名称:mips_to_c,代码行数:8,代码来源:c_types.py

示例10: type_to_string

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def type_to_string(type: CType) -> str:
    if isinstance(type, TypeDecl) and isinstance(type.type, (ca.Struct, ca.Union)):
        su = "struct" if isinstance(type.type, ca.Struct) else "union"
        return type.type.name or f"anon {su}"
    else:
        decl = ca.Decl("", [], [], [], type, None, None)
        set_decl_name(decl)
        return to_c(decl) 
开发者ID:matt-kempster,项目名称:mips_to_c,代码行数:10,代码来源:c_types.py

示例11: _build_const_declartions

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def _build_const_declartions(self, with_init=True):
        """
        Generate constants declarations

        :return: list of declarations
        """
        decls = []

        # Use type as provided by user in loop indices
        index_type = self.get_index_type()

        i = 2  # subscript for cli input, 1 is reserved for repeat
        for k in self.constants:
            # const long long N = strtoul(argv[2])
            # with increasing N and 1
            # TODO change subscript of argv depending on constant count
            type_decl = c_ast.TypeDecl(k.name, ['const'], c_ast.IdentifierType(index_type))
            init = None
            if with_init:
                init = c_ast.FuncCall(
                    c_ast.ID('atoi'),
                    c_ast.ExprList([c_ast.ArrayRef(c_ast.ID('argv'),
                                                   c_ast.Constant('int', str(i)))]))
            i += 1
            decls.append(c_ast.Decl(
                k.name, ['const'], [], [],
                type_decl, init, None))

        return decls 
开发者ID:RRZE-HPC,项目名称:kerncraft,代码行数:31,代码来源:kernel.py

示例12: get_array_declarations

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def get_array_declarations(self):
        """Return array declarations."""
        return [d for d in self.kernel_ast.block_items
                if type(d) is c_ast.Decl and type(d.type) is c_ast.ArrayDecl] 
开发者ID:RRZE-HPC,项目名称:kerncraft,代码行数:6,代码来源:kernel.py

示例13: _build_dummy_calls

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def _build_dummy_calls(self):
        """
        Generate false if branch with dummy calls

        Requires kerncraft.h to be included, which defines dummy(...) and var_false.

        :return: dummy statement
        """
        # Make sure nothing gets removed by inserting dummy calls
        dummy_calls = []
        for d in self.kernel_ast.block_items:
            # Only consider toplevel declarations from kernel ast
            if type(d) is not c_ast.Decl: continue
            if type(d.type) is c_ast.ArrayDecl:
                dummy_calls.append(c_ast.FuncCall(
                    c_ast.ID('dummy'),
                    c_ast.ExprList([c_ast.ID(d.name)])))
            else:
                dummy_calls.append(c_ast.FuncCall(
                    c_ast.ID('dummy'),
                    c_ast.ExprList([c_ast.UnaryOp('&', c_ast.ID(d.name))])))
        dummy_stmt = c_ast.If(
            cond=c_ast.ID('var_false'),
            iftrue=c_ast.Compound(dummy_calls),
            iffalse=None)
        return dummy_stmt 
开发者ID:RRZE-HPC,项目名称:kerncraft,代码行数:28,代码来源:kernel.py

示例14: get_scalar_declarations

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def get_scalar_declarations(self):
        """Get all scalar declarations."""
        return [d for d in self.kernel_ast.block_items
                if type(d) is c_ast.Decl and type(d.type) is c_ast.TypeDecl] 
开发者ID:RRZE-HPC,项目名称:kerncraft,代码行数:6,代码来源:kernel.py

示例15: __init__

# 需要导入模块: from pycparser import c_ast [as 别名]
# 或者: from pycparser.c_ast import Decl [as 别名]
def __init__(self, psize=4, bigend=False):

        self.psize = psize
        self.pclass = vs_prim.v_ptr32

        self.cls_parsers = {
            c_ast.Decl:             self.c_getVsDecl,
            c_ast.Struct:           self.c_getVsStruct,
            c_ast.FileAST:          self.c_getFileAst,
            c_ast.PtrDecl:          self.c_getPointer,
            #c_ast.FuncDecl:         self.c_getFuncDecl,
            c_ast.Constant:         self.c_getConstant,
            c_ast.TypeDecl:         self.c_getVsType,
            c_ast.ArrayDecl:        self.c_getVsArray,
            c_ast.IdentifierType:   self.c_getIdentType,
        }

        self.vs_ctypes = {
            ('char',):                  vs_prim.v_int8,
            ('unsigned','char'):        vs_prim.v_uint8,

            ('short',):                 vs_prim.v_int16,
            ('short','int'):            vs_prim.v_int16,

            ('unsigned', 'short',):     vs_prim.v_uint16,
            ('unsigned', 'short','int'):vs_prim.v_uint16,

            ('int',):                   vs_prim.v_int32,
            ('unsigned','int',):        vs_prim.v_uint32,

            ('long',):                  vs_prim.v_int32,
            ('long','int'):             vs_prim.v_int32,

            ('unsigned','long',):       vs_prim.v_uint32,
            ('unsigned','long','int'):  vs_prim.v_uint32,
        }

        if psize == 8:
            self.pclass = vs_prim.v_ptr64
            self.vs_ctypes.update({
                ('long',):                  vs_prim.v_int64,
                ('long','int'):             vs_prim.v_int64,

                ('unsigned','long',):       vs_prim.v_uint64,
                ('unsigned','long','int'):  vs_prim.v_uint64,
            }) 
开发者ID:joxeankoret,项目名称:nightmare,代码行数:48,代码来源:cparse.py


注:本文中的pycparser.c_ast.Decl方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。