class ParameterExpression extends Expression {

    private final int position;

    public ParameterExpression(int position) {
        this.position = position;
    }

    @Override
    public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
        return visitor.visitParameterExpression(this, context);
    }

    @Override
    public boolean equals(Object o) {<FILL_FUNCTION_BODY>}

    @Override
    public int hashCode() {
        return position;
    }

    public int position() {
        return position;
    }

    public int index() {
        return position - 1;
    }
}

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ParameterExpression that = (ParameterExpression) o;

        if (position != that.position) return false;

        return true;
    
<methods>public non-sealed void <init>() ,public R accept(AstVisitor<R,C>, C) ,public final java.lang.String toString() <variables>