internal package
Foswiki::Infix::Parser Escapes are supported in strings, using backslash.
ClassMethod
new($node_factory, \%options) → $parser_object Creates a new infix parser. Operators must be added for it to be useful.
The tokeniser matches tokens in the following order: operators, quotes (" and '), numbers, words, brackets. If you have any overlaps (e.g. an operator '<' and a bracket operator '<<') then the first choice will match.
$node_factory
needs to be ( the name of a package | an object ) that supports the
following two functions: newLeaf($val, $type)
- create a terminal. $type will be: words
specification (see below).
numbers
specification (see below)
newNode($op, @params)
- create a new operator node. @params is a variable-length list of parameters, left to right. $op is a reference to the operator hash in the \@opers list.
words=>qr//
- should be an RE specifying legal words (unquoted terminals that are not operators i.e. names and numbers). By default this is \w+
. It's ok if operator names match this RE; operators always have precedence over names.
numbers=>qr//
- should be an RE specifying legal numbers (unquoted terminals that are not operators or words). By default this is qr/[+-]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][+-]?\d+)?/
, which matches integers and floating-point numbers. Number matching always takes precedence over word matching (i.e. "1xy" will be parsed as a number followed by a word. A typical usage of this option is when you only want to recognise integers, in which case you would set this to numbers => qr/\d+/
.
ObjectMethod
addOperator($oper) $oper
is an object that implements the Foswiki::Infix::OP interface.
ObjectMethod
parse($string) → $parseTree $string
, calling newLeaf
and newNode
in the client class
as necessary to create a parse tree. Returns the result of calling newNode
on the root of the parse.
Throws Foswiki::Infix::Error in the event of parse errors.
ObjectMethod
onCloseExpr($@opands)