private ExpressionNode RefDeref() throws SyntaxException {
        try {
            Position pos = iterator.current().coordinates().starting();

            if (iterator.current().type().is(new Token.Type[] {
                Token.Type.AMPERSAND, Token.Type.ASTERISK
            })) {
                UnaryOperationNode.Operation operation;
                switch (iterator.current().type()) {
                    case AMPERSAND:
                        operation = UnaryOperationNode.Operation.REF;
                        break;
                    case ASTERISK:
                        operation = UnaryOperationNode.Operation.DEREF;
                        break;
                    default:
                        return ExpressionNode.InvalidNode(pos);
                }
                nextToken();
                return new UnaryOperationNode(operation, DExpression(), pos);
            } else {
                return EExpression();
            }
        } catch(SyntaxException ex) {
            throw ex;
        } catch(Exception ex) {
            throw (NonAnalysisException)new NonAnalysisException(ex)
                    .initPosition(iterator.current().coordinates().starting())
                    .Log("ru.bmstu.iu9.compiler.syntax");
        }
    }