Simplex Parser
If you are using match()
, snag()
, or lex()
,the Simplex class takes
care of everything on this page for you. However, if you want to call
Simplex Parser directly for a SimplexResult object
without lexing, you will first need to use parse_model
to generate the
model array.
Parse Model
The Unit::parse_model
function is a helper function in the Unit class.
It generates the Unit models from an input string, and is used for this purpose
in the Simplex constructor. It takes a onestring containing
the entered model as a parameter, and returns a FlexArray<Unit>
object
containing the parsed Unit objects.
Example:
// Create the model and model array objects, then parse
onestring model = "~d+/^l/";
FlexArray<Unit> model_array = Unit::parse_model(model);
In this example, the array contains two Units, the first of which will snag one or more digit characters, the second of which will match exactly one latin character.
Simplex Parser Function
The simplex_parser()
function is internally used by the match()
,
snag()
, and lex()
functions to produce their results, but can be
accessed directly if needed. This is where Simplex parses the input to determine
whether the results match, and snags any matching snag units to return to their
respective functions.
This function is not optimized or designed to be used externally, so there are
no helpful overloads currently implemented. If you need to use it, though, it
takes three parameters: an input string as a onestring
to check, a
FlexArray<Unit>
containing the parsed model of units, and an optional
bool
if you want to lex rather than match the model exclusively, which
defaults to false if not provided. (If you need to generate the FlexArray
separately, see Parse Model.) It returns a SimplexResult
object that consists of a boolean match
(used by match
), a FlexArray of
onestrings snag_array
(used by snag
), which will be empty if the match
fails, and a unsigned integer match_length
primarily for use cases of
lex()
.
Example:
// After using the model generation in the above example...
onestring input = "123a";
SimplexResult result = simplex_parser(input, model_array);
onestring input2 = "1234";
SimplexResult result2 = simplex_parser(input, model_array);
The result
object now contains the boolean match
, which is true, the
FlexArray snag_array
, which contains one onestring 123
, and the
uint_fast16_t match_length
which is 4. However, in result2
, match
is
false, the snag_array is empty, and the match_length is 0, because the input did
not contain a match for the ^l/
Unit.
Note
Because of the way the logic works, match_length
may be unreliable if
you are //not// lexing and have not flagged lexing as true.