private ExpressionNode HExpression() throws SyntaxException {
        try {
            ExpressionNode result = IExpression();

            while (iterator.current().type().is(Token.Type.AMPERSAND)) {
                Position pos = iterator.current().coordinates().starting();
                nextToken();
                ExpressionNode right = IExpression();
                result = 
                    new BinaryOperationNode(
                        BinaryOperationNode.Operation.BITWISE_AND,
                        result, 
                        right,
                        pos
                    );
            }

            return result;
        } catch(SyntaxException ex) {
            throw ex;
        } catch(Exception ex) {
            throw (NonAnalysisException)new NonAnalysisException(ex)
                    .initPosition(iterator.current().coordinates().starting())
                    .Log("ru.bmstu.iu9.compiler.syntax");
        }
    }