Changing the Parser behaviour

## A.5 Changing the Parser behaviour

Some of these properties can be changed by choosing one of the following syntax_options. The following options exist:

bar_is_no_atom
  disallow the use of an unquoted vertical bar as atom or functor (and turns it into a synonym for a semicolon instead).
based_bignums
  Allow base notation even to write integers longer than the wordsize (this implies they are always positive because the most significant bit is not interpreted as a sign bit).
blanks_after_sign
  ignore blank space between a sign and a number (by default, this space is significant and will lead to the sign being taken as prefix operator rather than the number's sign).
doubled_quote_is_quote
  parse a pair of quotes within a quoted item as one occurrence of the quote within the string. If this option is off (the default), consecutive string-quoted and list-quoted items are parsed as a single (concatenated) item, and consecutive quoted atoms are parsed as consecutive atoms.
iso_escapes
  ISO-Prolog compatible escape sequences within strings and atoms.
iso_base_prefix
  allow binary, octal or hexadecimal numbers to be written with 0b, 0o or 0x prefix respectively, and disallow the `base'number` notation.
limit_arg_precedence
  do not allow terms with a precedence higher than 999 as structure arguments, unless parenthesised.
nested_comments
  allow bracketed comments to be nested.
nl_in_quotes
  allow newlines to occur inside quotes.
no_array_subscripts
  disallow the ECLiPSe specific array-subscript syntax.
no_attributes
  disallow the ECLiPSe specific syntax for variable attributes in curly braces.
no_blanks
  do not allow blanks between functor an opening parenthesis
no_curly_arguments
  disallow the ECLiPSe specific syntax for structures with named arguments in curly braces.
read_floats_as_breals
  read all floating point numbers as bounded reals rather than as floats. The resulting breal is a small interval enclosing the true value of the number in decimal notation.
var_functor_is_apply
  allow variables as functors, and parse a term like `X(A,B,C)` as `apply(X,[A,B,C])`.

A number of further syntax options is provided for the purpose of parsing non-Prolog-like languages, in particular the Zinc family:

atom_subscripts
  allow subscripts after atoms, and parse a term like `a[B,C]` as `subscript(a,[B,C])`.
general_subscripts
  allow subscripts after atoms, parenthesized subterms and subscripted terms, and parse a term like `a[B][C]` as `subscript(subscript(a,[B]),[C])`, or `(a-b)[C]` as `subscript(a-b,[C])`.
curly_args_as_list
  parse the arguments of a term in curly brackets as a list, i.e. parse `{a,b,c}` as `{}([a,b,c])` instead of the default `{}((a,b,c))`.

Syntax option settings can be local to a module or exported, e.g.

    :- local syntax_option(not nl_in_quotes).
    :- export syntax_option(var_functor_is_apply).