## Copyright (C) 1993-2019 John W. Eaton
##
## This file is part of Octave.
##
## Octave is free software: you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## Octave is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Octave; see the file COPYING.  If not, see
## <https://www.gnu.org/licenses/>.

!
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} !
Logical 'not' operator.
@seealso{~, not}
@end deftypefn
~
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ~
Logical 'not' operator.

The symbol may also be used to discard outputs of a function that are unwanted
without using a temporary variable.

@example
[~, @var{idx_of_max}] = max (@var{x})
@end example
@seealso{!, not}
@end deftypefn
!=
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} !=
Logical 'not equals' operator.
@seealso{~=, ne}
@end deftypefn
~=
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ~=
Logical 'not equals' operator.
@seealso{!=, ne}
@end deftypefn
"
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} "
String delimiter.

Escape sequences within double-quoted strings are expanded.  I.e., "\n" is a
1-character string representing a newline.  See the single quote delimiter (')
to create strings without escape sequence processing.
@seealso{'}
@end deftypefn
#
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} #
Begin comment character.
@seealso{%, #@\{}
@end deftypefn
%
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} %
Begin comment character.
@seealso{#, %@\{}
@end deftypefn
#{
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} #@{
Begin block comment.

There must be no other characters, other than whitespace, on the line before
and after @code{#@{}.  It is possible to nest block comments.
@seealso{%@\{, #@\}, #}
@end deftypefn
%{
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} %@{
Begin block comment.

There must be no other characters, other than whitespace, on the line before
and after @code{%@{}.  It is possible to nest block comments.
@seealso{#@\{, %@\}, %}
@end deftypefn
#}
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} #@}
Close block comment.

There must be no other characters, other than whitespace, on the line before
and after @code{#@}}.  It is possible to nest block comments.
@seealso{%@\}, #@\{, #}
@end deftypefn
%}
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} %@}
Close block comment.

There must be no other characters, other than whitespace, on the line before
and after @code{%@}}.  It is possible to nest block comments.
@seealso{#@\}, %@\{, %}
@end deftypefn
...
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ...
Continuation marker.

Joins current line with following line before parsing.
@end deftypefn
&
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} &
Element by element logical 'and' operator.
@seealso{&&, and}
@end deftypefn
&&
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} &&
Logical 'and' operator (with short-circuit evaluation).
@seealso{&, and}
@end deftypefn
'
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} '
Matrix transpose operator or string delimiter.

For complex matrices, computes the complex conjugate (Hermitian) transpose.

The single quote character may also be used to delimit strings.  Escape
sequences within single-quoted strings are not expanded.  I.e., '\n' is a
2-character string '\' and 'n' rather than "\n" which is a single character
representing a newline.
@seealso{.', transpose, "}
@end deftypefn
(
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} (
Array index or function argument delimiter.
@end deftypefn
)
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {})
Array index or function argument delimiter.
@end deftypefn
*
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} *
Multiplication operator.
@seealso{.*, times}
@end deftypefn
**
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} **
Power operator.

This may return complex results for real inputs.  Use @code{realsqrt},
@code{cbrt}, @code{nthroot}, or @code{realpow} to obtain real results when
possible.
@seealso{power, ^, .**, .^, realpow, realsqrt, cbrt, nthroot}
@end deftypefn
^
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ^
Power operator.

This may return complex results for real inputs.  Use @code{realsqrt},
@code{cbrt}, @code{nthroot}, or @code{realpow} to obtain real results when
possible.
@seealso{power, **, .^, .**, realpow, realsqrt, cbrt, nthroot}
@end deftypefn
+
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} +
Addition operator.
@seealso{plus}
@end deftypefn
++
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ++
Increment operator.

As in C, may be applied as a prefix or postfix operator.
@seealso{--}
@end deftypefn
,
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ,
Array index, function argument, or command separator.
@end deftypefn
-
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} -
Subtraction or unary negation operator.
@seealso{minus}
@end deftypefn
--
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} --
Decrement operator.

As in C, may be applied as a prefix or postfix operator.
@seealso{++}
@end deftypefn
.'
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} .'
Matrix transpose operator.

For complex matrices, computes the transpose, @emph{not} the complex conjugate
(Hermitian) transpose.
@seealso{', transpose}
@end deftypefn
.*
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} .*
Element by element multiplication operator.
@seealso{*, times}
@end deftypefn
.**
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} .**
Element by element power operator.

If several complex results are possible, returns the one with smallest
non-negative argument (angle).  Use @code{realpow}, @code{realsqrt},
@code{cbrt}, or @code{nthroot} if a real result is preferred.
@seealso{**, ^, .^, power, realpow, realsqrt, cbrt, nthroot}
@end deftypefn
.^
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} .^
Element by element power operator.

If several complex results are possible, returns the one with smallest
non-negative argument (angle).  Use @code{realpow}, @code{realsqrt},
@code{cbrt}, or @code{nthroot} if a real result is preferred.
@seealso{.**, ^, **, power, realpow, realsqrt, cbrt, nthroot}
@end deftypefn
./
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ./
Element by element right division operator.
@seealso{/, .\\, rdivide, mrdivide}
@end deftypefn
/
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} /
Right division operator.
@seealso{./, \\, rdivide, mrdivide}
@end deftypefn
.\
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} .\
Element by element left division operator.
@seealso{\\, ./, rdivide, mrdivide}
@end deftypefn
\
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} \
Left division operator.

Within double-quoted strings, @samp{\} is the line continuation marker used
to join the current line with the following line.
@seealso{.\\, /, ldivide, mldivide}
@end deftypefn
:
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} :
Select entire rows or columns of matrices.
@end deftypefn
;
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ;
Array row or command separator.
@seealso{,}
@end deftypefn
<
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} <
'Less than' operator.
@seealso{lt}
@end deftypefn
<=
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} <=
'Less than' or 'equals' operator.
@seealso{le}
@end deftypefn
=
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} =
Assignment operator.
@end deftypefn
==
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ==
Equality test operator.
@seealso{eq}
@end deftypefn
>
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} >
'Greater than' operator.
@seealso{gt}
@end deftypefn
>=
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} >=
'Greater than' or 'equals' operator.
@seealso{ge}
@end deftypefn
[
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} [
Return list delimiter.
@seealso{]}
@end deftypefn
]
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ]
Return list delimiter.
@seealso{[}
@end deftypefn
|
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} |
Element by element logical 'or' operator.
@seealso{||, or}
@end deftypefn
||
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} ||
Logical 'or' (with short-circuit evaluation) operator.
@seealso{|, or}
@end deftypefn
@
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} @@
Return handle to a function.

Example:

@example
@group
f = @@plus;
f (2, 2)
@result{}  4
@end group
@end example

(Note: @@ also finds use in creating classes.  See manual chapter titled
Object Oriented Programming for detailed description.)
@seealso{function, functions, func2str, str2func}
@end deftypefn
break
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} break
Exit the innermost enclosing do, while, or for loop.
@seealso{do, while, for, parfor, continue}
@end deftypefn
case
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn  {} {} case @var{value}
@deftypefnx {} {} case @{@var{value}, @dots{}@}
A case statement in a switch block.

Octave cases are exclusive and do not fall-through as do C-language cases.  A
switch statement must have at least one case.  See @code{switch} for an
example.
@seealso{switch}
@end deftypefn
catch
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn  {} {} catch
@deftypefnx {} {} catch @var{value}
Begin the cleanup part of a try-catch block.
@seealso{try}
@end deftypefn
classdef
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} classdef
Begin a classdef block.
@seealso{properties, methods, events, enumeration}
@end deftypefn
continue
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} continue
Jump to the end of the innermost enclosing do, while, or for loop.
@seealso{break, do, while, for, parfor}
@end deftypefn
do
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} do
Begin a do-until loop.

This differs from a while loop in that the body of the loop is executed at
least once.

@example
@group
i = 0;
do
  i++
until (i == 10)
@end group
@end example
@seealso{for, until, while}
@end deftypefn
else
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} else
Alternate action for an if block.  See @code{if} for  an example.
@seealso{if}
@end deftypefn
elseif
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} elseif (@var{condition})
Alternate conditional test for an if block.  See @code{if} for an example.
@seealso{if}
@end deftypefn
end_try_catch
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} end_try_catch
Mark the end of a @code{try-catch} block.
@seealso{try, catch}
@end deftypefn
end_unwind_protect
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} end_unwind_protect
Mark the end of an unwind_protect block.
@seealso{unwind_protect}
@end deftypefn
endclassdef
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endclassdef
Mark the end of a classdef definition.
@seealso{classdef}
@end deftypefn
endenumeration
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endenumeration
Mark the end of an enumeration block in a classdef definition.
@seealso{enumeration}
@end deftypefn
endevents
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endevents
Mark the end of an events block in a classdef definition.
@seealso{events}
@end deftypefn
endfor
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endfor
Mark the end of a for loop.  See @code{for} for an example.
@seealso{for}
@end deftypefn
endfunction
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endfunction
Mark the end of a function.
@seealso{function}
@end deftypefn
endif
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endif
Mark the end of an if block.  See @code{if} for an example.
@seealso{if}
@end deftypefn
endmethods
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endmethods
Mark the end of a methods block in a classdef definition.
@seealso{methods}
@end deftypefn
endparfor
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endparfor
Mark the end of a parfor loop.  See @code{parfor} for an example.
@seealso{parfor}
@end deftypefn
endproperties
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endproperties
Mark the end of a properties block in a classdef definition.
@seealso{properties}
@end deftypefn
endswitch
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endswitch
Mark the end of a switch block.  See @code{switch} for an example.
@seealso{switch}
@end deftypefn
endwhile
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} endwhile
Mark the end of a while loop.  See @code{while} for an example.
@seealso{do, while}
@end deftypefn
enumeration
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} enumeration
Begin an enumeration block in a classdef definition.
@end deftypefn
events
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} events
Begin an events block in a classdef definition.
@end deftypefn
for
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} for @var{i} = @var{range}
Begin a for loop.

@example
@group
for i = 1:10
  i
endfor
@end group
@end example
@seealso{parfor, do, while}
@end deftypefn
function
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn  {} {} function @var{outputs} = function_name (@var{input}, @dots{})
@deftypefnx {} {} function {} function_name (@var{input}, @dots{})
@deftypefnx {} {} function @var{outputs} = function_name
Begin a function body with name @code{function_name}, with @var{outputs} as
results, and with @var{inputs} as parameters.  The function can later be
invoked in Octave using the syntax

@example
[@var{output1}, @var{output2}, @dots{}] = function_name (@var{input1}, @var{input2}, @dots{})
@end example

@seealso{return}
@end deftypefn
global
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} global @var{var}
Declare variables to have global scope.

@example
@group
global @var{x};
if (isempty (@var{x}))
  x = 1;
endif
@end group
@end example
@seealso{persistent}
@end deftypefn
if
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn  {} {} if (@var{cond}) @dots{} endif
@deftypefnx {} {} if (@var{cond}) @dots{} else @dots{} endif
@deftypefnx {} {} if (@var{cond}) @dots{} elseif (@var{cond}) @dots{} endif
@deftypefnx {} {} if (@var{cond}) @dots{} elseif (@var{cond}) @dots{} else @dots{} endif
Begin an if block.

@example
@group
x = 1;
if (x == 1)
  disp ("one");
elseif (x == 2)
  disp ("two");
else
  disp ("not one or two");
endif
@end group
@end example
@seealso{switch}
@end deftypefn
@c ## FIXME: Can't have duplicate DOCSTRING entries.  The function methods
@c ##        already has a docstring which overrides this keyword definition.
@c #methods
@c #@c libinterp/parse-tree/oct-parse.yy
@c #-*- texinfo -*-
@c #@deftypefn {} {} methods
@c #Begin a methods block in a classdef definition.
@c #@end deftypefn
otherwise
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} otherwise
The default statement in a switch block which is executed when no other
case statements match the input.
@seealso{switch, case}
@end deftypefn
parfor
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn  {} {} parfor @var{i} = @var{range}
@deftypefnx {} {} parfor (@var{i} = @var{range}, @var{maxproc})
Begin a for loop that may execute in parallel.

A @code{parfor} loop has the same syntax as a @code{for} loop.  If your Octave
session has a parallel processing pool enabled, the iterations of the
@code{parfor} loop will be executed in parallel across the pool's workers.
Otherwise, @code{parfor} will behave exactly as @code{for}.

When operating in parallel mode, a @code{parfor} loop's iterations are not
guaranteed to occur sequentially, and there are additional restrictions about
the data access operations you can do inside the loop body.

@strong{Warning:} parallel processing pools are currently unimplemented in
Octave; @code{parfor} currently behaves exactly as a normal @code{for} loop.

@example
@group
parfor i = 1:10
  i
endparfor
@end group
@end example
@seealso{for, do, while}
@end deftypefn
persistent
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} persistent @var{var}
Declare variables as persistent.

A variable that has been declared persistent within a function will retain its
contents in memory between subsequent calls to the same function.  The
difference between persistent variables and global variables is that persistent
variables are local in scope to a particular function and are not visible
elsewhere.
@seealso{global}
@end deftypefn
properties
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} properties
Begin a properties block in a classdef definition.
@end deftypefn
return
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} return
Return from a function.
@seealso{function}
@end deftypefn
switch
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} switch @var{statement}
Begin a switch block.

@example
@group
yesno = "yes";

switch (yesno)
  case @{"Yes" "yes" "YES" "y" "Y"@}
    value = 1;
  case @{"No" "no" "NO" "n" "N"@}
    value = 0;
  otherwise
    error ("invalid value");
endswitch
@end group
@end example
@seealso{if, case, otherwise}
@end deftypefn
try
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} try
Begin a try-catch block.

If an error occurs within a try block, then the catch code will be run and
execution will proceed after the catch block (though it is often recommended to
use the lasterr function to re-throw the error after cleanup is completed).
@seealso{catch, unwind_protect}
@end deftypefn
until
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} until (@var{cond})
End a do-until loop.  See @code{do} for an example.
@seealso{do}
@end deftypefn
unwind_protect
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} unwind_protect
Begin an unwind_protect block.

If an error occurs within the first part of an unwind_protect block the
commands within the unwind_protect_cleanup block are executed before the error
is thrown.  If an error is not thrown, then the unwind_protect_cleanup block is
still executed.  In other words, the unwind_protect_cleanup code is guaranteed
to execute regardless of success or failure in the unwind_protect block.
@seealso{unwind_protect_cleanup, try}
@end deftypefn
unwind_protect_cleanup
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} unwind_protect_cleanup
Begin the cleanup section of an unwind_protect block.
@seealso{unwind_protect}
@end deftypefn
varargin
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} varargin
Pass an arbitrary number of arguments into a function.
@seealso{varargout, nargin, isargout, nargout, nthargout}
@end deftypefn
varargout
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} varargout
Pass an arbitrary number of arguments out of a function.
@seealso{varargin, nargin, isargout, nargout, nthargout}
@end deftypefn
while
@c libinterp/parse-tree/oct-parse.yy
-*- texinfo -*-
@deftypefn {} {} while
Begin a while loop.

@example
@group
i = 0;
while (i < 10)
  i++
endwhile
@end group
@end example
@seealso{do, endwhile, for, until}
@end deftypefn
