@Override
        protected Token computeNext() {
            if (this.end) {
                return endOfData();
            }
            try {
                int token = this.tokenizer.nextToken();
                switch (token) {
                    case StreamTokenizer.TT_EOF:
                        this.end = true;
                        return ConstantToken.EOF;
                    case StreamTokenizer.TT_WORD:
                        return new VariableToken(this.tokenizer.sval);
                    case '(':
                        return ConstantToken.OPEN_BRACKET;
                    case ')':
                        return ConstantToken.CLOSE_BRACKET;
                    case '&':
                        return ConstantToken.AND;
                    case '|':
                        return ConstantToken.OR;
                    case '!':
                        return ConstantToken.NOT;
                    default:
                        throw new LexerException("Unknown token: " + (char) token + "(" + token + ")");
                }
            } catch (IOException e) {
                throw new LexerException(e);
            }
        }
Lexes a {@link String} into a list of {@link Token}s.
common/src/main/java/me/lucko/luckperms/common/verbose/expression/BooleanExpressionCompiler.java