void parse(List<Token> tokens) {
ArrayDeque<Token> stack = new ArrayDeque<>();
for (Token token : tokens) {
if (opens(token)) stack.push(token);
else resolve(stack.pop(), token);
}
}
def parse(tokens) -> None:
stack = []
for token in tokens:
if opens(token):
stack.append(token)
else:
resolve(stack.pop(), token)
def parse(tokens: Iterable[Token]): Unit =
val stack = scala.collection.mutable.Stack[Token]()
for token <- tokens do
if opens(token) then stack.push(token)
else resolve(stack.pop(), token)
void parse(const std::vector<Token>& tokens) {
std::vector<Token> stack;
for (const Token& token : tokens) {
if (opens(token)) stack.push_back(token);
else {
resolve(stack.back(), token);
stack.pop_back();
}
}
}