[vset VERSION 1.0.1]
[comment {-*- text -*- doctools manpage}]
[manpage_begin pt::pe n [vset VERSION]]
[include include/module.inc]
[titledesc {Parsing Expression Serialization}]
[require pt::pe [opt [vset VERSION]]]
[require char]
[description]
[include include/ref_intro.inc]

This package provides commands to work with the serializations of
parsing expressions as managed by the Parser Tools, and specified in
section [sectref {PE serialization format}].

[para]

This is a supporting package in the Core Layer of Parser Tools.
[para][image arch_core_support][para]

[section API]

[list_begin definitions]

[call [cmd ::pt::pe] [method verify] \
	[arg serial] [opt [arg canonvar]]]

This command verifies that the content of [arg serial] is a valid
serialization of a parsing expression and will throw an error if that
is not the case. The result of the command is the empty string.

[para]

If the argument [arg canonvar] is specified it is interpreted as the
name of a variable in the calling context. This variable will be
written to if and only if [arg serial] is a valid regular
serialization. Its value will be a boolean, with [const True]
indicating that the serialization is not only valid, but also
[term canonical]. [const False] will be written for a valid, but
non-canonical serialization.

[para]

For the specification of serializations see the section
[sectref {PE serialization format}].

[call [cmd ::pt::pe] [method verify-as-canonical] \
	[arg serial]]

This command verifies that the content of [arg serial] is a valid
[term canonical] serialization of a parsing expression and will throw
an error if that is not the case. The result of the command is the
empty string.

[para]

For the specification of canonical serializations see the section
[sectref {PE serialization format}].

[call [cmd ::pt::pe] [method canonicalize] [arg serial]]

This command assumes that the content of [arg serial] is a valid
[term regular] serialization of a parsing expression and will throw an
error if that is not the case.

[para]

It will then convert the input into the [term canonical] serialization
of this parsing expression and return it as its result. If the input
is already canonical it will be returned unchanged.

[para]

For the specification of regular and canonical serializations see the
section [sectref {PE serialization format}].

[call [cmd ::pt::pe] [method print] [arg serial]]

This command assumes that the argument [arg serial] contains a valid
serialization of a parsing expression and returns a string containing
that PE in a human readable form.

[para]

The exact format of this form is not specified and cannot be relied on
for parsing or other machine-based activities.

[para]

For the specification of serializations see the section
[sectref {PE serialization format}].

[call [cmd ::pt::pe] [method bottomup] [arg cmdprefix] [arg pe]]

This command walks the parsing expression [arg pe] from the bottom up
to the root, invoking the command prefix [arg cmdprefix] for each
partial expression. This implies that the children of a parsing
expression PE are handled before PE.

[para]

The command prefix has the signature

[list_begin definitions]
[call [cmd cmdprefix] [arg pe] [arg op] [arg arguments]]

I.e. it is invoked with the parsing expression [arg pe] the walk is
currently at, the [arg op]'erator in the [arg pe], and the operator's
[arg arguments].

[para]

The result returned by the command prefix replaces [arg pe] in the
parsing expression it was a child of, allowing transformations of the
expression tree.

[para]

This also means that for all inner parsing expressions the contents of
[arg arguments] are the results of the command prefix invoked for the
children of this inner parsing expression.

[list_end]

[call [cmd ::pt::pe] [method topdown] [arg cmdprefix] [arg pe]]

This command walks the parsing expression [arg pe] from the root down
to the leaves, invoking the command prefix [arg cmdprefix] for each
partial expression. This implies that the children of a parsing
expression PE are handled after PE.

[para]

The command prefix has the same signature as for [method bottomup],
see above.

[para]

The result returned by the command prefix is [emph ignored].

[call [cmd ::pt::pe] [method equal] \
	[arg seriala] [arg serialb]]

This command tests the two parsing expressions [arg seriala] and
[arg serialb] for structural equality. The result of the command is a
boolean value. It will be set to [const true] if the expressions are
identical, and [const false] otherwise.

[para]

String equality is usable only if we can assume that the two parsing
expressions are pure Tcl lists.

[call [cmd ::pt::pe] [method epsilon]]

This command constructs the atomic parsing expression for epsilon.

[call [cmd ::pt::pe] [method dot]]

This command constructs the atomic parsing expression for dot.

[call [cmd ::pt::pe] [method alnum]]

This command constructs the atomic parsing expression for alnum.

[call [cmd ::pt::pe] [method alpha]]

This command constructs the atomic parsing expression for alpha.

[call [cmd ::pt::pe] [method ascii]]

This command constructs the atomic parsing expression for ascii.

[call [cmd ::pt::pe] [method control]]

This command constructs the atomic parsing expression for control.

[call [cmd ::pt::pe] [method digit]]

This command constructs the atomic parsing expression for digit.

[call [cmd ::pt::pe] [method graph]]

This command constructs the atomic parsing expression for graph.

[call [cmd ::pt::pe] [method lower]]

This command constructs the atomic parsing expression for lower.

[call [cmd ::pt::pe] [method print]]

This command constructs the atomic parsing expression for print.

[call [cmd ::pt::pe] [method punct]]

This command constructs the atomic parsing expression for punct.

[call [cmd ::pt::pe] [method space]]

This command constructs the atomic parsing expression for space.

[call [cmd ::pt::pe] [method upper]]

This command constructs the atomic parsing expression for upper.

[call [cmd ::pt::pe] [method wordchar]]

This command constructs the atomic parsing expression for wordchar.

[call [cmd ::pt::pe] [method xdigit]]

This command constructs the atomic parsing expression for xdigit.

[call [cmd ::pt::pe] [method ddigit]]

This command constructs the atomic parsing expression for ddigit.

[call [cmd ::pt::pe] [method terminal] [arg t]]

This command constructs the atomic parsing expression for the terminal
symbol [arg t].

[call [cmd ::pt::pe] [method range] [arg ta] [arg tb]]

This command constructs the atomic parsing expression for the range of
terminal symbols [arg ta] ... [arg tb].

[call [cmd ::pt::pe] [method nonterminal] [arg nt]]

This command constructs the atomic parsing expression for the
nonterminal symbol [arg nt].

[call [cmd ::pt::pe] [method choice] [arg pe]...]

This command constructs the parsing expression representing the
ordered or prioritized choice between the argument parsing
expressions. The first argument has the highest priority.

[call [cmd ::pt::pe] [method sequence] [arg pe]...]

This command constructs the parsing expression representing the
sequence of the argument parsing expression. The first argument is the
first element of the sequence.

[call [cmd ::pt::pe] [method repeat0] [arg pe]]

This command constructs the parsing expression representing the zero
or more repetition of the argument parsing expression [arg pe], also
known as the kleene closure.

[call [cmd ::pt::pe] [method repeat1] [arg pe]]

This command constructs the parsing expression representing the one or
more repetition of the argument parsing expression [arg pe], also
known as the positive kleene closure.

[call [cmd ::pt::pe] [method optional] [arg pe]]

This command constructs the parsing expression representing the
optionality of the argument parsing expression [arg pe].

[call [cmd ::pt::pe] [method ahead] [arg pe]]

This command constructs the parsing expression representing the
positive lookahead of the argument parsing expression [arg pe].

[call [cmd ::pt::pe] [method notahead] [arg pe]]

This command constructs the parsing expression representing the
negative lookahead of the argument parsing expression [arg pe].

[list_end]

[include include/serial/pexpression.inc]
[include include/feedback.inc]
[manpage_end]
