protected boolean parse(SimpleCalcDriver driver, String str) {
		if (str == null) {
			return false;
		}
		this.input = str;
		this.position = 0;
		
		Token token;
		while (true) {
			token = getToken();
			if (token.getType() == Node.OP_EOF) {
				break;
			} else if (token.getType() == Node.OP_LIST) {
				driver.list();
			} else if (token.getType() == Node.OP_PRINT) {
				Node node = exprAddSub();
				driver.print(node);
				node = null;
			} else if (token.getType() == Node.OP_VALUE) {
				Token equ = getToken();
				if (equ.getType() != Node.OP_EQU) {
					return false;
				}
				Node node = exprAddSub();
				driver.assign(token.getStr(), node);
				node = null;
			} else if (token.getType() != Node.OP_NEWLINE) {
				return false;
			}
			token = getToken();
			if (token.getType() != Node.OP_NEWLINE) {
				ungetToken(token);
			}
		}
		return true;
	}