Пример #1
0
 def test_invalid_bytecode(self):
     lexer = LexerStateMachine('int x = 5; if(x==5){x=6;}else{x=7;}', self.context)
     parser = Parser(lexer, self.manager)
     self.manager.setParser(parser)
     token = parser.parseStatements(0)
     bytecodes = self.generator.generateCode(token)
     vm = VirtualMachine()
     vm.VMLoad(bytecodes)
     lexer = LexerStateMachine('x = x +5;', self.context)
     parser.lexer = lexer
     token = parser.parseStatements(0)
     bytecodes = self.generator.generateCode(token)
     cbytecodes = vm.convertToCArray(bytecodes)
     vm.dumpBytecodes(cbytecodes)
    def test_VMStep(self):
        bytecode = []
        bytecode.append(ByteCodeGenerator.dumpRegisterHex(None, [7]))  # hacked bytecode to display r7 value
        bytecode.append(ByteCodeGenerator.dumpRegisterHex(None, [7]))  #
        bytecode.append(ByteCodeGenerator.halt(None))

        vm = VirtualMachine()
        cbytecodes = vm.convertToCArray(bytecode)
        cCharArray_t = c_char * 300
        cCharArray = cCharArray_t(0)
        cPtr = c_char_p
        cPtr = cCharArray
        vm.dumpBytecodes(bytecode)

        vm.dumpBytecode(bytecode[0])
        vm.dumpBytecode(bytecode[1])
        vm.dumpBytecode(bytecode[2])
Пример #3
0
generator = GeneratorAPI(context, contextManager)
byteCodeGenerator = ByteCodeGenerator(context, contextManager)
informationInjector = InformationInjector()
vm = VirtualMachine()
parser = Parser(None, contextManager)
contextManager.setParser(parser)

print('Imba the Cinterpreter')
while(1):
    stopSymbol = ' '
    StringCode = ''
    print('> ', end="")
    for statement in iter(input, stopSymbol):
        StringCode = StringCode + '\n' +statement
        print('> ', end="")
    StringList = StringCode.split('\n')
    lexer = LexerStateMachine(StringCode, context)
    parser.lexer = lexer
    
    tokenList = []
    try:
        token = parser.parseStatements(0)
        byteCodes = generator.generateCode(token)
          # to halt the VM
        cbytecode = vm.convertToCArray(byteCodes)
        vm.dumpBytecodes(cbytecode)
        vm.VMRun(cbytecode)
    except SyntaxError as e:
        print(e.msg)