TWiki::Infix::Parser
$client_class
needs to be the name of a package that supports the
following two functions: newLeaf($val, $type)
- create a terminal. $type will be: words
specification (see below).
numbers
specification (see below)
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 atoms.
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+/
.
\%oper
is a hash (or an object), containing the following fields: name
- operator string
prec
- operator precedence, positive non-zero integer. Larger number => higher precedence.
arity
- set to 1 if this operator is unary, 2 for binary. Arity 0 is legal, should you ever need it.
close
- used with bracket operators. name
should be the open bracket string, and close
the close bracket. The existance of close
marks this as a bracket operator.
casematters=
- indicates that the parser should check case in the operator name (i.e. treat 'AND' and 'and' as different). By default operators are case insensitive. Note that operator names must be caselessly unique i.e. you can't define 'AND' and 'and' as different operators in the same parser. Does not affect the interpretation of non-operator terminals (names).
InfixParser_
are reserved for use
by the parser.
$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 TWiki::Infix::Error in the event of parse errors.
Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Linux® is the registered trademark of Linus Torvalds in the U.S. and other countries.
Microchip and others, are registered trademarks or trademarks of Microchip Technology Inc. and its subsidiaries.
Arm® and others are registered trademarks or trademarks of Arm Limited (or its affiliates). Other terms and product names may be trademarks of others.
Ideas, requests, contributions ? Connect to LinksToCommunities page.