private ExpressionNode Const() {
        ExpressionNode node;
        Position pos = iterator.current().coordinates().starting();
        switch (iterator.current().type()) {
            case CONST_CHAR:
                node = 
                    new CharConstantLeaf(
                        ((CharConstantToken)iterator.current()).value, 
                        pos
                    );
                break;
            case CONST_DOUBLE:
                node = 
                    new DoubleConstantLeaf(
                        ((DoubleConstantToken)iterator.current()).value, 
                        pos
                    );
                break;
            case CONST_INT:
                node = 
                    new IntegerConstantLeaf(
                        ((IntegerConstantToken)iterator.current()).value, 
                        pos
                    );
                break;
            case TRUE:
                node = new BoolConstantLeaf(Boolean.TRUE, pos);
                break;
            case FALSE:
                node = new BoolConstantLeaf(Boolean.FALSE, pos);
                break;
            default:
                node = ExpressionNode.InvalidNode(pos);
        }
        
        nextToken();
        return node;
    }