private static Node parseLeft(ParserContext ctx) {
        Token left = ctx.currentToken;
        if (left instanceof Identifier) {
            return new VariableNode(((Identifier) left).getName());
        } else if (left instanceof Value) {
            return new ConstNode((Integer) ((Value) left).getValue());
        } else if (left == Symbol.LPAR) {
            Node expression = parse(ctx);
            if (ctx.nextToken() != Symbol.RPAR) {
                throw new IllegalArgumentException("AAAA");
            }
            return expression;
        } else {
            throw new UnsupportedOperationException();
        }
    }