예제 #1
0
    def evaluate(self, code):
        self.cpu, self.mem = CPU(), VirtualMemory()
        symbol_table = SymbolTable(
            (
                ('__ LABELS __', SymbolTable()),
                ('__ GOTOS __', defaultdict(list)),
                ('__ stack __', Stack()),
                ('__ expression __', expression),
                ('__ statement __', statement)
            )
        )

        load(
            set_addresses(
                chain(
                    emitter.statement(
                        next(parser.statement(
                            preprocess(tokenize(source(code))), SymbolTable((('__ LABELS __', SymbolTable()),)))
                        ),
                        symbol_table
                    ),
                    (Halt('__EOP__'),)
                )
            ),
            self.mem,
        )
        evaluate(self.cpu, self.mem)
예제 #2
0
    def test_executable(self):
        source_codes = """
            extern int b;
            int main()
            {
                b = 10;
                return 0;
            }
        """, 'int b;'

        mem = VirtualMemory()
        cpu = CPU()
        symbol_table = SymbolTable()
        load(
            set_addresses(
                resolve(
                    executable(
                        chain.from_iterable(emit(parse(preprocess(tokenize(source(code))))) for code in source_codes),
                        symbol_table
                    ),
                    symbol_table
                ),
            ),
            mem
        )
        evaluate(cpu, mem)
예제 #3
0
 def evaluate_expr(self, code):
     self.mem, self.cpu = VirtualMemory(), CPU()
     load(
         set_addresses(
             chain(emit_expression(parser.expression(preprocess(tokenize(source(code))))), (Halt('__EOP__'),)),
         ),
         self.mem
     )
     evaluate(self.cpu, self.mem)
예제 #4
0
 def evaluate_expr(self, code):
     self.mem, self.cpu = VirtualMemory(), CPU()
     load(
         set_addresses(
             chain(
                 emit_expression(
                     parser.expression(preprocess(tokenize(source(code))))),
                 (Halt('__EOP__'), )), ), self.mem)
     evaluate(self.cpu, self.mem)
예제 #5
0
파일: base.py 프로젝트: qs9816/c_compiler
 def evaluate(self, code, cpu=None, mem=None, os=None):
     self.cpu, self.mem, self.os = cpu or CPU(), mem or VirtualMemory(), os or Kernel(CALLS)
     load(set_addresses(
         instrs(
             (StringIO(code),),
             std_include_dirs,
             libraries=ifilter(path.isfile, starmap(path.join, product(std_libraries_dirs, std_libraries)))
         )
     ), self.mem)
     evaluate(self.cpu, self.mem, self.os)
예제 #6
0
def assembly(files, includes=(), libraries=(), optimizer=identity):
    mem = OrderedDict()
    load_binaries(
        linker.set_addresses(instrs(files, includes, libraries, optimizer)),
        mem)
    for addr, instr in ifilter(lambda i: isinstance(i[1], Instruction),
                               mem.iteritems()):
        yield '{l}:{addr}: {elem}\n'.format(l=loc(instr),
                                            addr=addr,
                                            elem=instr)
예제 #7
0
    def evaluate(self, code):
        symbol_table, self.cpu, self.mem = SymbolTable(), CPU(), VirtualMemory()

        load(
            set_addresses(
                resolve(executable(emit(parse(preprocess(tokenize(source(code))))), symbol_table), symbol_table)
            ),
            self.mem,
        )

        evaluate(self.cpu, self.mem)
예제 #8
0
파일: base.py 프로젝트: mzsk/c_compiler
 def evaluate(self, code, cpu=None, mem=None, os=None):
     self.cpu, self.mem, self.os = cpu or CPU(), mem or VirtualMemory(
     ), os or Kernel(CALLS)
     load(
         set_addresses(
             instrs((StringIO(code), ),
                    std_include_dirs,
                    libraries=ifilter(
                        path.isfile,
                        starmap(path.join,
                                product(std_libraries_dirs,
                                        std_libraries))))), self.mem)
     evaluate(self.cpu, self.mem, self.os)
예제 #9
0
    def evaluate(self, code):
        self.cpu, self.mem = CPU(), VirtualMemory()
        symbol_table = SymbolTable(
            (('__ LABELS __', SymbolTable()),
             ('__ GOTOS __', defaultdict(list)), ('__ stack __', Stack()),
             ('__ expression __', expression), ('__ statement __', statement)))

        load(
            set_addresses(
                chain(
                    emitter.statement(
                        next(
                            parser.statement(
                                preprocess(tokenize(source(code))),
                                SymbolTable(
                                    (('__ LABELS __', SymbolTable()), )))),
                        symbol_table), (Halt('__EOP__'), ))),
            self.mem,
        )
        evaluate(self.cpu, self.mem)
예제 #10
0
    def test_executable(self):
        source_codes = """
            extern int b;
            int main()
            {
                b = 10;
                return 0;
            }
        """, 'int b;'

        mem = VirtualMemory()
        cpu = CPU()
        symbol_table = SymbolTable()
        load(
            set_addresses(
                resolve(
                    executable(
                        chain.from_iterable(
                            emit(parse(preprocess(tokenize(source(code)))))
                            for code in source_codes), symbol_table),
                    symbol_table), ), mem)
        evaluate(cpu, mem)
예제 #11
0
파일: cc.py 프로젝트: qs9816/c_compiler
def assembly(files, includes=(), libraries=(), optimizer=identity):
    mem = OrderedDict()
    load_binaries(linker.set_addresses(instrs(files, includes, libraries, optimizer)), mem)
    for addr, instr in ifilter(lambda i: isinstance(i[1], Instruction), mem.iteritems()):
        yield '{l}:{addr}: {elem}\n'.format(l=loc(instr), addr=addr, elem=instr)
예제 #12
0
def start(instrs):
    mem = VirtualMemory()
    cpu = CPU()
    os = Kernel(CALLS)
    load(set_addresses(instrs), mem)
    evaluate(cpu, mem, os)
예제 #13
0
파일: vm.py 프로젝트: qs9816/c_compiler
def start(instrs):
    mem = VirtualMemory()
    cpu = CPU()
    os = Kernel(CALLS)
    load(set_addresses(instrs), mem)
    evaluate(cpu, mem, os)