Language: C++

#include<bits/stdc++.h>
#define range(i,a,b) for(int i = (a); i < (b); i++)
#define rep(i,b) for(int i = 0; i < (b); i++)
#define all(a) (a).begin(), (a).end()
#define show(x)  cerr << #x << " = " << (x) << endl;
using namespace std;

template<typename T>
ostream& operator << (ostream& os, vector<T>& v){
	rep(i,v.size()){ os << v[i] << (i == v.size() - 1 ? "" : " "); } return os;
}
template<typename T>
istream& operator >> (istream& is, vector<T>& v){
	for(T& x: v){ is >> x; } return is;
}


typedef string::const_iterator State;
int number(State&);
pair<int,bool> factor(State&);
pair<int,bool> term(State&);
pair<int,bool> expression(State&);

bool invalid;

// 数字の列をパースして、その数を返す。
int number(State &begin) {
	if(not isdigit(*begin)){
		invalid = true;
		return 0;
	}

	int ret = 0;

	while (isdigit(*begin)) {
		ret *= 2;
		ret += *begin - '0';
		begin++;
	}

	return ret;
}

// 括弧か数をパースして、その評価結果を返す。
pair<int,bool> factor(State &begin) {
	if(invalid) return make_pair(0,0);
	if (*begin == '(') {
		begin++; // '('を飛ばす。
		pair<int,bool> ret = expression(begin);
		if(not ret.second) {
			invalid = true;
		}
		begin++; // ')'を飛ばす。
		ret.second = 0;
		return ret;
	} else {
		return make_pair(number(begin), 0);
	}
	return make_pair(0, 0);
}

// 乗算除算の式をパースして、その評価結果を返す。
pair<int,bool> term(State &begin) {
	if(invalid) return make_pair(0,0);
	pair<int,bool> ret = factor(begin);

	for (;;) {
		if (*begin == '*') {
			begin++;
			ret.second = true;
			ret.first *= factor(begin).first;
		} else {
			break;
		}
	}

	return ret;
}

// 四則演算の式をパースして、その評価結果を返す。
pair<int,bool> expression(State &begin) {
	if(invalid) return make_pair(0,0);
	pair<int,bool> ret = term(begin);

	for (;;) {
		if (*begin == '+') {
			begin++;
			ret.second = true;
			ret.first += term(begin).first;
		} else if (*begin == '-') {
			begin++;
			ret.second = true;
			ret.first -= term(begin).first;
		} else {
			break;
		}
	}

	return ret;
}

//beginがexpectedを指していたらbeginを一つ進める。
void consume(State &begin, char expected) {
	if (*begin == expected) {
		begin++;
	} else {
		cerr << "Expected '" << expected << "' but got '" << *begin << "'" << endl;
		cerr << "Rest string is '";
		while (*begin) {
			cerr << *begin++;
		}
		cerr << "'" << endl;
		//throw ParseError();
	}
}

const string c = "01+-*()";

bool check(string& s){
	int cnt = 0;
	bool op = false, st = false;
	show(s)
	rep(i,s.size()){
		cout << i << endl;
		if(s[i] == '('){
			if(st) return false;
			cnt++;
			op = true;
		}else if(s[i] == ')'){
			if(op or st) return false;
			cnt--;
			op = false;
			st = true;
		}else if(s[i] == '+' or s[i] == '-'){
			op = false;
			st = false;
		}
	}
	show(cnt)
	return cnt == 0;
}

int dfs(string s, int i){
	if(i == s.size()){
		//if(not check(s)) return -1e5;

		invalid = false;
		State tmp = s.begin();

		pair<int,bool> ans = expression(tmp);
		if(ans.first >= 1024) continue;
		if(tmp != s.end()) return -1e5;
		//cout << ans << ' ' << s << endl;
		return invalid ? -1e5 : ans.first;
	}

	while(s[i] != '.' and i < s.size()){
		i++;
	}

	if(s[i] == '.'){
		int res = -1e5;
		rep(j,c.size()){
			s[i] = c[j];
			res = max(res, dfs(s, i));
		}
		return res;
	}else{
		return dfs(s, i);
	}
}

int main(){
	string s;
	cin >> s;

	cout << dfs(s, 0) << endl;
}



Compiler output:
a.cc: In function 'int dfs(std::string, int)':
a.cc:151:39: error: continue statement not within a loop
  151 |                 if(ans.first >= 1024) continue;
      |                                       ^~~~~~~~