Provided by: tcllib_1.19-dfsg-2_all bug

NAME

       pt::pe::op - Parsing Expression Utilities

SYNOPSIS

       package require Tcl  8.5

       package require pt::pe::op  ?1.0.1?

       package require pt::pe  ?1?

       package require struct::set

       ::pt::pe::op drop dropset pe

       ::pt::pe::op rename nt ntnew pe

       ::pt::pe::op called pe

       ::pt::pe::op flatten pe

       ::pt::pe::op fusechars pe

_________________________________________________________________________________________________

DESCRIPTION

       Are  you  lost  ?   Do you have trouble understanding this document ?  In that case please
       read the overview provided by the Introduction to  Parser  Tools.  This  document  is  the
       entrypoint to the whole system the current package is a part of.

       This  package  provides  additional  commands  to  work with the serializations of parsing
       expressions as managed by the PEG and  related  packages,  and  specified  in  section  PE
       serialization format.

       This  is  an  internal  package, for use by the higher level packages handling PEGs, their
       conversion into and out of various other formats, or other uses.

API

       ::pt::pe::op drop dropset pe
              This command removes all occurences of any of the nonterminals symbols in  the  set
              dropset  from  the parsing expression pe, and simplifies it. This may result in the
              expression becoming "epsilon", i.e. matching nothing.

       ::pt::pe::op rename nt ntnew pe
              This command renames all occurences of the nonterminal nt in the parsing expression
              pe into ntnew.

       ::pt::pe::op called pe
              This  command  extracts  the set of all nonterminal symbols used, i.e. 'called', in
              the parsing expression pe.

       ::pt::pe::op flatten pe
              This command transforms the parsing expression by eliminating sequences  nested  in
              sequences,  and  choices  in choices, lifting the children of the nested expression
              into the parent. It further eliminates all sequences  and  choices  with  only  one
              child, as these are redundant.

              The resulting parsing expression is returned as the result of the command.

       ::pt::pe::op fusechars pe
              This  command  transforms  the  parsing  expression by fusing adjacent terminals in
              sequences and adjacent terminals and ranges in choices, it (re)constructs highlevel
              strings and character classes.

              The  resulting  pseudo-parsing  expression is returned as the result of the command
              and may contain the pseudo-operators str for character sequences, aka strings,  and
              cl for character choices, aka character classes.

              The  result  is called a pseudo-parsing expression because it is not a true parsing
              expression anymore, and will fail a check with ::pt::peg verify if the new  pseudo-
              operators  are  present  in  the  result, but is otherwise of sound structure for a
              parsing expression.  Notably, the commands ::pt::peg bottomup and ::pt::peg topdown
              will process them without trouble.

PE SERIALIZATION FORMAT

       Here  we  specify  the format used by the Parser Tools to serialize Parsing Expressions as
       immutable values for transport, comparison, etc.

       We distinguish between regular and canonical serializations.  While a  parsing  expression
       may have more than one regular serialization only exactly one of them will be canonical.

       Regular serialization

              Atomic Parsing Expressions

                     [1]    The  string  epsilon  is an atomic parsing expression. It matches the
                            empty string.

                     [2]    The string dot is  an  atomic  parsing  expression.  It  matches  any
                            character.

                     [3]    The  string  alnum  is  an  atomic parsing expression. It matches any
                            Unicode alphabet or digit character. This is a  custom  extension  of
                            PEs based on Tcl's builtin command string is.

                     [4]    The  string  alpha  is  an  atomic parsing expression. It matches any
                            Unicode alphabet character. This is a custom extension of  PEs  based
                            on Tcl's builtin command string is.

                     [5]    The  string  ascii  is  an  atomic parsing expression. It matches any
                            Unicode character below U0080. This is  a  custom  extension  of  PEs
                            based on Tcl's builtin command string is.

                     [6]    The  string  control  is an atomic parsing expression. It matches any
                            Unicode control character. This is a custom extension of PEs based on
                            Tcl's builtin command string is.

                     [7]    The  string  digit  is  an  atomic parsing expression. It matches any
                            Unicode digit character. Note that this includes  characters  outside
                            of the [0..9] range. This is a custom extension of PEs based on Tcl's
                            builtin command string is.

                     [8]    The string graph is an atomic  parsing  expression.  It  matches  any
                            Unicode  printing  character,  except  for  space.  This  is a custom
                            extension of PEs based on Tcl's builtin command string is.

                     [9]    The string lower is an atomic  parsing  expression.  It  matches  any
                            Unicode  lower-case alphabet character. This is a custom extension of
                            PEs based on Tcl's builtin command string is.

                     [10]   The string print is an atomic  parsing  expression.  It  matches  any
                            Unicode  printing  character,  including  space.  This  is  a  custom
                            extension of PEs based on Tcl's builtin command string is.

                     [11]   The string punct is an atomic  parsing  expression.  It  matches  any
                            Unicode  punctuation  character.  This  is  a custom extension of PEs
                            based on Tcl's builtin command string is.

                     [12]   The string space is an atomic  parsing  expression.  It  matches  any
                            Unicode  space  character. This is a custom extension of PEs based on
                            Tcl's builtin command string is.

                     [13]   The string upper is an atomic  parsing  expression.  It  matches  any
                            Unicode  upper-case alphabet character. This is a custom extension of
                            PEs based on Tcl's builtin command string is.

                     [14]   The string wordchar is an atomic parsing expression. It  matches  any
                            Unicode  word  character.  This  is  any  alphanumeric character (see
                            alnum), and any connector punctuation characters (e.g.   underscore).
                            This  is  a  custom  extension  of PEs based on Tcl's builtin command
                            string is.

                     [15]   The string xdigit is an atomic parsing  expression.  It  matches  any
                            hexadecimal  digit character. This is a custom extension of PEs based
                            on Tcl's builtin command string is.

                     [16]   The string ddigit is an atomic parsing  expression.  It  matches  any
                            decimal  digit  character. This is a custom extension of PEs based on
                            Tcl's builtin command regexp.

                     [17]   The expression [list t x] is an atomic parsing expression. It matches
                            the terminal string x.

                     [18]   The expression [list n A] is an atomic parsing expression. It matches
                            the nonterminal A.

              Combined Parsing Expressions

                     [1]    For parsing expressions e1, e2, ... the result of [list / e1 e2 ... ]
                            is  a  parsing  expression  as well.  This is the ordered choice, aka
                            prioritized choice.

                     [2]    For parsing expressions e1, e2, ... the result of [list x e1 e2 ... ]
                            is a parsing expression as well.  This is the sequence.

                     [3]    For  a  parsing  expression  e  the result of [list * e] is a parsing
                            expression as well.  This is the kleene closure, describing  zero  or
                            more repetitions.

                     [4]    For  a  parsing  expression  e  the result of [list + e] is a parsing
                            expression as well.  This is the positive kleene closure,  describing
                            one or more repetitions.

                     [5]    For  a  parsing  expression  e  the result of [list & e] is a parsing
                            expression as well.  This is the and lookahead predicate.

                     [6]    For a parsing expression e the result of [list  !  e]  is  a  parsing
                            expression as well.  This is the not lookahead predicate.

                     [7]    For  a  parsing  expression  e  the result of [list ? e] is a parsing
                            expression as well.  This is the optional input.

       Canonical serialization
              The canonical serialization of a parsing expression has the format as specified  in
              the  previous  item,  and  then additionally satisfies the constraints below, which
              make it unique among all the possible serializations of this parsing expression.

              [1]    The string representation of the value is the canonical representation of  a
                     pure Tcl list. I.e. it does not contain superfluous whitespace.

              [2]    Terminals  are  not  encoded as ranges (where start and end of the range are
                     identical).

   EXAMPLE
       Assuming the parsing expression shown on the right-hand side of the rule

                  Expression <- Term (AddOp Term)*

       then its canonical serialization (except for whitespace) is

                  {x {n Term} {* {x {n AddOp} {n Term}}}}

BUGS, IDEAS, FEEDBACK

       This document, and the package it describes,  will  undoubtedly  contain  bugs  and  other
       problems.    Please   report   such   in   the   category   pt   of  the  Tcllib  Trackers
       [http://core.tcl.tk/tcllib/reportlist].  Please also report any ideas for enhancements you
       may have for either package and/or documentation.

       When proposing code changes, please provide unified diffs, i.e the output of diff -u.

       Note further that attachments are strongly preferred over inlined patches. Attachments can
       be made by going to the Edit form of the ticket immediately after its creation,  and  then
       using the left-most button in the secondary navigation bar.

KEYWORDS

       EBNF,  LL(k),  PEG,  TDPL,  context-free languages, expression, grammar, matching, parser,
       parsing expression, parsing expression grammar, push down  automaton,  recursive  descent,
       state, top-down parsing languages, transducer

CATEGORY

       Parsing and Grammars

COPYRIGHT

       Copyright (c) 2009 Andreas Kupries <andreas_kupries@users.sourceforge.net>