Presentation is loading. Please wait.

Presentation is loading. Please wait.

Building a Java Interpreter CS 142 (b) 01/14. Lab Sessions Monday, Wednesday – 10am – noon – ICS 189 Send an email or make an appointment with the TA.

Similar presentations


Presentation on theme: "Building a Java Interpreter CS 142 (b) 01/14. Lab Sessions Monday, Wednesday – 10am – noon – ICS 189 Send an email or make an appointment with the TA."— Presentation transcript:

1 Building a Java Interpreter CS 142 (b) 01/14

2 Lab Sessions Monday, Wednesday – 10am – noon – ICS 189 Send an email or make an appointment with the TA

3 Java Interpreter Input: a bytecode instruction stream Output: a native-code instruction stream In our project: – Translate each bytecode instruction to C++ code

4 Instructions We Are Interested in iconst, iload and istore iadd if_icmpne, if_icmpeq, if_icmpgt, if_icmplt, ifeq, ifne, ifgt, iflt goto invokestatic return

5 Building an Interpreter void interpret(InstructionSeq is){ for (Instruction i = is.first(); i != null; i = next) { int opCode = i.getOpCode(); next = is.nextInstruction(i); switch(opCode){ case iload: int index = i.getOperand(); int value = values.get(index); push(value); break; case istore: int index = i.getOperand(); int value = pop(); values.set(index, value); break; }

6 Building an Interpreter (Cond.) for(Instruction i = is.first(); i != null; i = next){ int opCode = i.getOpCode(); next = is.nextInstruction(i); switch(opCode){ case iadd: int value1 = pop(); int value2 = pop(); push(value1 + value2); break; case if_icmpeq: int value1 = pop(); int value2 = pop(); int target = i.getOperand(); if(value1 == value2) next = is.getInstruction(target); break; case goto: int target = i.getOperand(); next = is.getInstruction(target); break; }

7 Building an Interpreter (Cond.) void interpret(InstructionSeq is){ for(Instruction i = is.first(); i != null; i = next){ … case invokestatic: String mName = ((CallInsruction) i). getTarget(); InstructionSet newSet = findInstructionSetforMethod(mName); invoke(newSet); break; }

8 Handling of println If the target of a static method is System.out.println, just call C++ function printf on the parameter string


Download ppt "Building a Java Interpreter CS 142 (b) 01/14. Lab Sessions Monday, Wednesday – 10am – noon – ICS 189 Send an email or make an appointment with the TA."

Similar presentations


Ads by Google