protected boolean balancedJSToken() {
        Deque<Character> stack = new ArrayDeque<Character>();
        while (true) {
            int c = input.read();
            if (stack.isEmpty() && c == '`') {
                return true;
            }
            if (!stack.isEmpty() && stack.element() == c) {
                stack.poll();
            } else if (c == '"' || c == '\'') {
                stack.push((char) c);
            } else if (c == '\\') {
                c = input.read();
            } else if (c == CoffeeScriptLexerInput.EOF) {
                return false;
            }
        }
    }