All pastes #259133 Raw Edit

Someone

public text v1 · immutable
#259133 ·published 2006-11-27 03:31 UTC
rendered paste body
public static ArrayList<Instruction> parse(Scanner tokens) {
		ArrayList<Instruction> instructions = new ArrayList<Instruction>();
		Instruction nextInstruction;
		String thisToken;
		int tokenIndex;
		
		ArrayList<Integer> jzTokens = new ArrayList<Integer>();
		int jzIndex;
		
		while(tokens.hasNext()) {
			thisToken = tokens.next();
			
			if (!validInstruction(thisToken)) {
				// invalid token, return null
				return null;
			} else {
				// add the instruction to the ArrayList
				nextInstruction = new Instruction(thisToken);
				instructions.add(nextInstruction);
			}

			tokenIndex = instructions.size() - 1;
			
			if (thisToken.equals("jz")) {
				// record the index of the JZ
				jzTokens.add(tokenIndex);
			} else if (thisToken.equals("jump")) {
				if (jzTokens.size() == 0) {
					// We received a JUMP token, but we do not have any JZ
					// tokens to associate it with. Return null.
					return null;
				} else {
					// Set the matching jump indexes for this jump token
					jzIndex = jzTokens.get(jzTokens.size() - 1);
					instructions.get(tokenIndex).setMatchingJump(jzIndex); 
					instructions.get(jzIndex).setMatchingJump(tokenIndex);
					jzTokens.remove(jzTokens.size() - 1);
				}
			}
		}
		
		if (jzTokens.size() > 0) {
			// too many JZ instructions
			return null;
		}

		return instructions;
	}