Presentation is loading. Please wait.

Presentation is loading. Please wait.

Building a Java Interpreter

Similar presentations


Presentation on theme: "Building a Java Interpreter"— Presentation transcript:

1 Building a Java Interpreter
CS 142 (b) 04/10/18

2 Lab Sessions Monday, Wednesday
10am – noon ICS 189 Send an 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 value = pop(); values.set(index, value); }

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); case goto: int target = i.getOperand(); next = is.getInstruction(target); }

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"

Similar presentations


Ads by Google