Beispiel #1
0
def go (args):
    with open (args.file) as f:
        asn1def = f.read()

    parse_tree = parser.parse_asn1(asn1def)
    modules = build_semantic_model(parse_tree)
    assert (len(modules) == 1)
    base, ext = os.path.splitext (args.file)
    parts = os.path.split (base)
    module_name = parts[-1]
    if args.outdir:
        path = args.outdir
    else:
        path = "."

    if args.lang == 'python':
        from tinyber.py_nodes import PythonBackend as Backend
        from tinyber import py_nodes as nodes
    elif args.lang == 'c':
        from tinyber.c_nodes import CBackend as Backend
        from tinyber import c_nodes as nodes

    # pull in the python-specific node implementations
    walker = Walker (modules[0], nodes)
    walker.walk()

    backend = Backend (args, walker, module_name, path)
    backend.generate_code()
Beispiel #2
0
def go(args):
    with open(args.file) as f:
        asn1def = f.read()

    parse_tree = parser.parse_asn1(asn1def)
    modules = build_semantic_model(parse_tree)
    assert (len(modules) == 1)
    base, ext = os.path.splitext(args.file)
    parts = os.path.split(base)
    module_name = parts[-1]
    if args.outdir:
        path = args.outdir
    else:
        path = "."

    if args.lang == 'python':
        from tinyber.py_nodes import PythonBackend as Backend
        from tinyber import py_nodes as nodes
    elif args.lang == 'c':
        from tinyber.c_nodes import CBackend as Backend
        from tinyber import c_nodes as nodes

    # pull in the python-specific node implementations
    walker = Walker(modules[0], nodes)
    walker.walk()

    backend = Backend(args, walker, module_name, path)
    backend.generate_code()
Beispiel #3
0
def main():
    args = parse_args()
    with open(args.file) as f:
        asn1def = f.read()

    if args.outdir and (args.parse or args.sema):
        print('ERROR: can only use --outdir with --gen')
        return 1

    parse_tree = parser.parse_asn1(asn1def)
    if args.parse:
        parser.print_parse_tree(parse_tree)
        return 0

    modules = sema.build_semantic_model(parse_tree)
    if args.sema:
        for module in modules:
            print(module)
        return 0

    if args.gen:
        for module in modules:
            generate_module_code(args, module, modules)

    return 0
Beispiel #4
0
def realise(incdirs, restargs):
    defmods = {}
    refmods = {}

    incdirs.append(os.path.curdir)
    for file_ in restargs:
        modnm = os.path.basename(file_).lower()
        dprint('Parsing ASN.1 syntaxdef for "%s"', modnm)
        with open(file_, 'r') as asn1fh:
            asn1txt = asn1fh.read()
            asn1tree = parser.parse_asn1(asn1txt)
        dprint('Building semantic model for "%s"', modnm)
        asn1sem = build_semantic_model(asn1tree)
        defmods[os.path.basename(file_)] = asn1sem[0]
        refmods[os.path.splitext(modnm)[0]] = asn1sem[0]
        dprint('Realised semantic model for "%s"', modnm)

    imports = list(refmods.keys())
    while len(imports) > 0:
        dm = refmods[imports.pop(0).lower()]

        if not dm.imports:
            continue

        for rm in dm.imports.imports.keys():
            rm = str(rm).lower()
            if rm not in refmods:
                dprint('Importing ASN.1 include for "%s"', rm)
                modfh = None
                for incdir in incdirs:
                    try:
                        modfh = open(incdir + os.path.sep + rm + '.asn1', 'r')
                        break
                    except IOError:
                        continue
                if modfh is None:
                    raise Exception(
                        'No include file "{}.asn1" found'.format(rm))
                asn1txt = modfh.read()
                asn1tree = parser.parse_asn1(asn1txt)
                dprint('Building semantic model for "%s"', rm)
                asn1sem = build_semantic_model(asn1tree)
                refmods[rm] = asn1sem[0]
                imports.append(rm)
                dprint('Realised semantic model for "%s"', rm)
    return defmods, refmods
Beispiel #5
0
def realise(incdirs, restargs):
    defmods = {}
    refmods = {}

    incdirs.append(os.path.curdir)
    for file_ in restargs:
        modnm = os.path.basename(file_).lower()
        dprint('Parsing ASN.1 syntaxdef for "%s"', modnm)
        with open(file_, 'r') as asn1fh:
            asn1txt = asn1fh.read()
            asn1tree = parser.parse_asn1(asn1txt)
        dprint('Building semantic model for "%s"', modnm)
        asn1sem = build_semantic_model(asn1tree)
        defmods[os.path.basename(file_)] = asn1sem[0]
        refmods[os.path.splitext(modnm)[0]] = asn1sem[0]
        dprint('Realised semantic model for "%s"', modnm)

    imports = list(refmods.keys())
    while len(imports) > 0:
        dm = refmods[imports.pop(0).lower()]

        if not dm.imports:
            continue

        for rm in dm.imports.imports.keys():
            rm = str(rm).lower()
            if rm not in refmods:
                dprint('Importing ASN.1 include for "%s"', rm)
                modfh = None
                for incdir in incdirs:
                    try:
                        modfh = open(incdir + os.path.sep + rm + '.asn1', 'r')
                        break
                    except IOError:
                        continue
                if modfh is None:
                    raise Exception('No include file "{}.asn1" found'.format(rm))
                asn1txt = modfh.read()
                asn1tree = parser.parse_asn1(asn1txt)
                dprint('Building semantic model for "%s"', rm)
                asn1sem = build_semantic_model(asn1tree)
                refmods[rm] = asn1sem[0]
                imports.append(rm)
                dprint('Realised semantic model for "%s"', rm)
    return defmods, refmods
Beispiel #6
0
def main():
    args = parse_args()
    with open(args.file) as f:
        asn1def = f.read()

    parse_tree = parser.parse_asn1(asn1def)
    if args.parse:
        parser.print_parse_tree(parse_tree)
        return 0

    modules = sema.build_semantic_model(parse_tree)
    if args.sema:
        for module in modules:
            print(module)
        return 0

    if args.gen:
        for module in modules:
            print(pygen.auto_generated_header(args.file, __version__))
            pyasn1gen.generate_pyasn1(module, sys.stdout, modules)

    return 0
Beispiel #7
0
def main():
    args = parse_args()
    with open(args.file) as f:
        asn1def = f.read()

    parse_tree = parser.parse_asn1(asn1def)
    if args.parse:
        parser.print_parse_tree(parse_tree)
        return 0

    modules = sema.build_semantic_model(parse_tree)
    if args.sema:
        for module in modules:
            print(module)
        return 0

    if args.gen:
        for module in modules:
            print(pygen.auto_generated_header(args.file, __version__))
            pyasn1gen.generate_pyasn1(module, sys.stdout, modules)

    return 0
Beispiel #8
0
def main():
    args = parse_args()
    with open(args.file) as f:
        asn1def = f.read()

    if args.outdir and not args.gen:
        print('ERROR: can only use --outdir with --gen', file=sys.stderr)
        return 1

    parse_tree = parser.parse_asn1(asn1def)
    if args.parse:
        parser.print_parse_tree(parse_tree)
        return 0

    modules = sema.build_semantic_model(parse_tree)
    if args.sema:
        for module in modules:
            print(module)
        return 0

    if args.gen:
        generate_module_code(args)

    return 0