The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Name

Unisyn::Parse - Parse a Unisyn expression.

Synopsis

Parse the Unisyn expression:

  𝒂 ❴ 𝒃 ⟦𝒄⟨ 𝗮 𝑒𝑞𝑢𝑎𝑙𝑠 𝒅 𝗯 𝙙 𝐭𝐢𝐦𝐞𝐬 ⟪𝗰 𝐩𝐥𝐮𝐬 𝗱⟫⟢  𝗲 𝑎𝑠𝑠𝑖𝑔𝑛 𝗳 𝐬𝐮𝐛 𝗴 𝙝⟩ 𝙘 ⟧ 𝙗 ❵ 𝙖

To get:

  Suffix: 𝙖
    Term
      Prefix: 𝒂
        Term
          Brackets: ⦇⦈
            Term
              Term
                Suffix: 𝙗
                  Term
                    Prefix: 𝒃
                      Term
                        Brackets: ⦋⦌
                          Term
                            Term
                              Suffix: 𝙘
                                Term
                                  Prefix: 𝒄
                                    Term
                                      Brackets: ⦏⦐
                                        Term
                                          Term
                                            Semicolon
                                              Term
                                                Assign: 𝑒𝑞𝑢𝑎𝑙𝑠
                                                  Term
                                                    Variable: 𝗮
                                                  Term
                                                    Dyad: 𝐭𝐢𝐦𝐞𝐬
                                                      Term
                                                        Suffix: 𝙙
                                                          Term
                                                            Prefix: 𝒅
                                                              Term
                                                                Variable: 𝗯
                                                      Term
                                                        Brackets: ⦓⦔
                                                          Term
                                                            Term
                                                              Dyad: 𝐩𝐥𝐮𝐬
                                                                Term
                                                                  Variable: 𝗰
                                                                Term
                                                                  Variable: 𝗱
                                              Term
                                                Assign: 𝑎𝑠𝑠𝑖𝑔𝑛
                                                  Term
                                                    Variable: 𝗲
                                                  Term
                                                    Dyad: 𝐬𝐮𝐛
                                                      Term
                                                        Variable: 𝗳
                                                      Term
                                                        Suffix: 𝙝
                                                          Term
                                                            Variable: 𝗴

Then traverse the parse tree printing the type of each node:

  variable
  variable
  prefix_d
  suffix_d
  variable
  variable
  plus
  times
  equals
  variable
  variable
  variable
  sub
  assign
  semiColon
  brackets_3
  prefix_c
  suffix_c
  brackets_2
  prefix_b
  suffix_b
  brackets_1
  prefix_a
  suffix_a

Description

Parse a Unisyn expression.

Version "20211013".

The following sections describe the methods in each functional area of this module. For an alphabetic listing of all methods by name see Index.

Create

Create a Unisyn parse of a utf8 string.

create($address, %options)

Create a new unisyn parse from a utf8 string.

     Parameter  Description
  1  $address   Address of a zero terminated utf8 source string to parse as a variable
  2  %options   Parse options.

Example:

    create (K(address, Rutf8 $Lex->{sampleText}{vav}))->print;                    # Create parse tree from source terminated with zero  # 𝗘𝘅𝗮𝗺𝗽𝗹𝗲


    ok Assemble(debug => 0, eq => <<END);
  Assign: 𝑎
    Term
      Variable: 𝗮
    Term
      Variable: 𝗯
  END

Parse

Parse Unisyn expressions

Traverse

Traverse the parse tree

traverseParseTree($parse)

Traverse the terms in parse tree in post order and call the operator subroutine associated with each term.

     Parameter  Description
  1  $parse     Parse tree

Example:

    my $s = Rutf8 $Lex->{sampleText}{Adv};                                        # Ascii
    my $p = create K(address, $s), operators => \&printOperatorSequence;

    K(address, $s)->printOutZeroString;
    $p->dumpParseTree;
    $p->print;

    $p->traverseParseTree;  # 𝗘𝘅𝗮𝗺𝗽𝗹𝗲


    Assemble(debug => 0, eq => <<END)
  𝗮𝗮𝑒𝑞𝑢𝑎𝑙𝑠abc 123    𝐩𝐥𝐮𝐬𝘃𝗮𝗿
  Tree at:  0000 0000 0000 10D8  length: 0000 0000 0000 000B
    Keys: 0000 1118 0500 000B   0000 0000 0000 0000   0000 0000 0000 000D   0000 000C 0000 0009   0000 0008 0000 0007   0000 0006 0000 0005   0000 0004 0000 0002   0000 0001 0000 0000
    Data: 0000 0000 0000 0016   0000 0000 0000 0000   0000 0000 0000 0F18   0000 0009 0000 0AD8   0000 0009 0000 0004   0000 0006 0000 0002   0000 0005 0041 26A4   0000 0003 0000 0009
    Node: 0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000
      index: 0000 0000 0000 0000   key: 0000 0000 0000 0000   data: 0000 0000 0000 0009
      index: 0000 0000 0000 0001   key: 0000 0000 0000 0001   data: 0000 0000 0000 0003
      index: 0000 0000 0000 0002   key: 0000 0000 0000 0002   data: 0000 0000 0041 26A4
      index: 0000 0000 0000 0003   key: 0000 0000 0000 0004   data: 0000 0000 0000 0005
      index: 0000 0000 0000 0004   key: 0000 0000 0000 0005   data: 0000 0000 0000 0002
      index: 0000 0000 0000 0005   key: 0000 0000 0000 0006   data: 0000 0000 0000 0006
      index: 0000 0000 0000 0006   key: 0000 0000 0000 0007   data: 0000 0000 0000 0004
      index: 0000 0000 0000 0007   key: 0000 0000 0000 0008   data: 0000 0000 0000 0009
      index: 0000 0000 0000 0008   key: 0000 0000 0000 0009   data: 0000 0000 0000 0AD8 subTree
      index: 0000 0000 0000 0009   key: 0000 0000 0000 000C   data: 0000 0000 0000 0009
      index: 0000 0000 0000 000A   key: 0000 0000 0000 000D   data: 0000 0000 0000 0F18 subTree
    Tree at:  0000 0000 0000 0AD8  length: 0000 0000 0000 0007
      Keys: 0000 0B18 0000 0007   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0007   0000 0006 0000 0005   0000 0004 0000 0002   0000 0001 0000 0000
      Data: 0000 0000 0000 000E   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0002 0000 0000   0000 0006 0041 176C   0000 0001 0000 0009
      Node: 0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000
        index: 0000 0000 0000 0000   key: 0000 0000 0000 0000   data: 0000 0000 0000 0009
        index: 0000 0000 0000 0001   key: 0000 0000 0000 0001   data: 0000 0000 0000 0001
        index: 0000 0000 0000 0002   key: 0000 0000 0000 0002   data: 0000 0000 0041 176C
        index: 0000 0000 0000 0003   key: 0000 0000 0000 0004   data: 0000 0000 0000 0006
        index: 0000 0000 0000 0004   key: 0000 0000 0000 0005   data: 0000 0000 0000 0000
        index: 0000 0000 0000 0005   key: 0000 0000 0000 0006   data: 0000 0000 0000 0002
        index: 0000 0000 0000 0006   key: 0000 0000 0000 0007   data: 0000 0000 0000 0000
    end
    Tree at:  0000 0000 0000 0F18  length: 0000 0000 0000 000B
      Keys: 0000 0F58 0500 000B   0000 0000 0000 0000   0000 0000 0000 000D   0000 000C 0000 0009   0000 0008 0000 0007   0000 0006 0000 0005   0000 0004 0000 0002   0000 0001 0000 0000
      Data: 0000 0000 0000 0016   0000 0000 0000 0000   0000 0000 0000 0DD8   0000 0009 0000 0C18   0000 0009 0000 0003   0000 0004 0000 0013   0000 0003 0041 2E40   0000 0003 0000 0009
      Node: 0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000
        index: 0000 0000 0000 0000   key: 0000 0000 0000 0000   data: 0000 0000 0000 0009
        index: 0000 0000 0000 0001   key: 0000 0000 0000 0001   data: 0000 0000 0000 0003
        index: 0000 0000 0000 0002   key: 0000 0000 0000 0002   data: 0000 0000 0041 2E40
        index: 0000 0000 0000 0003   key: 0000 0000 0000 0004   data: 0000 0000 0000 0003
        index: 0000 0000 0000 0004   key: 0000 0000 0000 0005   data: 0000 0000 0000 0013
        index: 0000 0000 0000 0005   key: 0000 0000 0000 0006   data: 0000 0000 0000 0004
        index: 0000 0000 0000 0006   key: 0000 0000 0000 0007   data: 0000 0000 0000 0003
        index: 0000 0000 0000 0007   key: 0000 0000 0000 0008   data: 0000 0000 0000 0009
        index: 0000 0000 0000 0008   key: 0000 0000 0000 0009   data: 0000 0000 0000 0C18 subTree
        index: 0000 0000 0000 0009   key: 0000 0000 0000 000C   data: 0000 0000 0000 0009
        index: 0000 0000 0000 000A   key: 0000 0000 0000 000D   data: 0000 0000 0000 0DD8 subTree
      Tree at:  0000 0000 0000 0C18  length: 0000 0000 0000 0007
        Keys: 0000 0C58 0000 0007   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0007   0000 0006 0000 0005   0000 0004 0000 0002   0000 0001 0000 0000
        Data: 0000 0000 0000 000E   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0001   0000 0007 0000 0008   0000 0002 0041 53FE   0000 0001 0000 0009
        Node: 0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000
          index: 0000 0000 0000 0000   key: 0000 0000 0000 0000   data: 0000 0000 0000 0009
          index: 0000 0000 0000 0001   key: 0000 0000 0000 0001   data: 0000 0000 0000 0001
          index: 0000 0000 0000 0002   key: 0000 0000 0000 0002   data: 0000 0000 0041 53FE
          index: 0000 0000 0000 0003   key: 0000 0000 0000 0004   data: 0000 0000 0000 0002
          index: 0000 0000 0000 0004   key: 0000 0000 0000 0005   data: 0000 0000 0000 0008
          index: 0000 0000 0000 0005   key: 0000 0000 0000 0006   data: 0000 0000 0000 0007
          index: 0000 0000 0000 0006   key: 0000 0000 0000 0007   data: 0000 0000 0000 0001
      end
      Tree at:  0000 0000 0000 0DD8  length: 0000 0000 0000 0007
        Keys: 0000 0E18 0000 0007   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0007   0000 0006 0000 0005   0000 0004 0000 0002   0000 0001 0000 0000
        Data: 0000 0000 0000 000E   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0002   0000 0003 0000 0017   0000 0006 0041 176C   0000 0001 0000 0009
        Node: 0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000   0000 0000 0000 0000
          index: 0000 0000 0000 0000   key: 0000 0000 0000 0000   data: 0000 0000 0000 0009
          index: 0000 0000 0000 0001   key: 0000 0000 0000 0001   data: 0000 0000 0000 0001
          index: 0000 0000 0000 0002   key: 0000 0000 0000 0002   data: 0000 0000 0041 176C
          index: 0000 0000 0000 0003   key: 0000 0000 0000 0004   data: 0000 0000 0000 0006
          index: 0000 0000 0000 0004   key: 0000 0000 0000 0005   data: 0000 0000 0000 0017
          index: 0000 0000 0000 0005   key: 0000 0000 0000 0006   data: 0000 0000 0000 0003
          index: 0000 0000 0000 0006   key: 0000 0000 0000 0007   data: 0000 0000 0000 0002
      end
    end
  end
  Assign: 𝑒𝑞𝑢𝑎𝑙𝑠
    Term
      Variable: 𝗮𝗮
    Term
      Dyad: 𝐩𝐥𝐮𝐬
        Term
          Ascii: abc 123
        Term
          Variable: 𝘃𝗮𝗿
  variable
  ascii
  variable
  plus
  equals
  END

    my $s = Rutf8 $Lex->{sampleText}{ws};
    my $p = create (K(address, $s), operators => \&printOperatorSequence);

    K(address, $s)->printOutZeroString;                                           # Print input string
    $p->print;                                                                    # Print parse

    $p->traverseParseTree;                                                        # Traverse tree printing terms  # 𝗘𝘅𝗮𝗺𝗽𝗹𝗲


    Assemble(debug => 0, eq => <<END)
  𝗮𝑎𝑠𝑠𝑖𝑔𝑛⌊⟨❨𝗯𝗽❩⟩𝐩𝐥𝐮𝐬❪𝘀𝗰❫⌋⟢𝗮𝗮𝑎𝑠𝑠𝑖𝑔𝑛❬𝗯𝗯𝐩𝐥𝐮𝐬𝗰𝗰❭⟢
  Semicolon
    Term
      Assign: 𝑎𝑠𝑠𝑖𝑔𝑛
        Term
          Variable: 𝗮
        Term
          Brackets: ⌊⌋
            Term
              Term
                Dyad: 𝐩𝐥𝐮𝐬
                  Term
                    Brackets: ❨❩
                      Term
                        Term
                          Brackets: ❬❭
                            Term
                              Term
                                Variable: 𝗯𝗽
                  Term
                    Brackets: ❰❱
                      Term
                        Term
                          Variable: 𝘀𝗰
    Term
      Assign: 𝑎𝑠𝑠𝑖𝑔𝑛
        Term
          Variable: 𝗮𝗮
        Term
          Brackets: ❴❵
            Term
              Term
                Dyad: 𝐩𝐥𝐮𝐬
                  Term
                    Variable: 𝗯𝗯
                  Term
                    Variable: 𝗰𝗰
  variable
  variable
  variable
  plus
  assign
  variable
  variable
  variable
  plus
  assign
  semiColon
  END

makeExecutionChain($parse)

Traverse the parse tree in post order to create an execution chain.

     Parameter  Description
  1  $parse     Parse tree

Print

Print a parse tree

print($parse)

Print a parse tree.

     Parameter  Description
  1  $parse     Parse tree

Example:

    create (K(address, Rutf8 $Lex->{sampleText}{vav}))->print;                    # Create parse tree from source terminated with zero  # 𝗘𝘅𝗮𝗺𝗽𝗹𝗲


    ok Assemble(debug => 0, eq => <<END);
  Assign: 𝑎
    Term
      Variable: 𝗮
    Term
      Variable: 𝗯
  END

dumpParseTree($parse)

Dump the parse tree.

     Parameter  Description
  1  $parse     Parse tree

Execute

Associate methods with each operator via a set of quarks describing the method to be called for each lexical operator.

lexToSub($parse, $alphabet, $op, $sub)

Map a lexical item to a processing subroutine.

     Parameter  Description
  1  $parse     Sub quarks
  2  $alphabet  The alphabet number
  3  $op        The operator name in that alphabet
  4  $sub       Subroutine definition

dyad($parse, $text, $sub)

Define a method for a dyadic operator.

     Parameter  Description
  1  $parse     Sub quarks
  2  $text      The name of the operator as a utf8 string
  3  $sub       Associated subroutine definition

assign($parse, $text, $sub)

Define a method for an assign operator.

     Parameter  Description
  1  $parse     Sub quarks
  2  $text      The name of the operator as a utf8 string
  3  $sub       Associated subroutine definition

prefix($parse, $text, $sub)

Define a method for a prefix operator.

     Parameter  Description
  1  $parse     Sub quarks
  2  $text      The name of the operator as a utf8 string
  3  $sub       Associated subroutine definition

suffix($parse, $text, $sub)

Define a method for a suffix operator.

     Parameter  Description
  1  $parse     Sub quarks
  2  $text      The name of the operator as a utf8 string
  3  $sub       Associated subroutine definition

ascii($parse, $sub)

Define a method for ascii text.

     Parameter  Description
  1  $parse     Sub quarks
  2  $sub       Associated subroutine definition

semiColon($parse, $sub)

Define a method for the semicolon operator which comes in two forms: the explicit semi colon and a new line semicolon.

     Parameter  Description
  1  $parse     Sub quarks
  2  $sub       Associated subroutine definition

variable($parse, $sub)

Define a method for a variable.

     Parameter  Description
  1  $parse     Sub quarks
  2  $sub       Associated subroutine definition

bracket($parse, $open, $sub)

Define a method for a bracket operator.

     Parameter  Description
  1  $parse     Sub quarks
  2  $open      Opening parenthesis
  3  $sub       Associated subroutine

Alphabets

Translate between alphabets.

asciiToAssignLatin($in)

Translate ascii to the corresponding letters in the assign latin alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToAssignGreek($in)

Translate ascii to the corresponding letters in the assign greek alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToDyadLatin($in)

Translate ascii to the corresponding letters in the dyad latin alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToDyadGreek($in)

Translate ascii to the corresponding letters in the dyad greek alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToPrefixLatin($in)

Translate ascii to the corresponding letters in the prefix latin alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToPrefixGreek($in)

Translate ascii to the corresponding letters in the prefix greek alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToSuffixLatin($in)

Translate ascii to the corresponding letters in the suffix latin alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToSuffixGreek($in)

Translate ascii to the corresponding letters in the suffix greek alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToVariableLatin($in)

Translate ascii to the corresponding letters in the suffix latin alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToVariableGreek($in)

Translate ascii to the corresponding letters in the suffix greek alphabet.

     Parameter  Description
  1  $in        A string of ascii

asciiToEscaped($in)

Translate ascii to the corresponding letters in the escaped ascii alphabet.

     Parameter  Description
  1  $in        A string of ascii

semiColonChar()

Translate ascii to the corresponding letters in the escaped ascii alphabet.

printOperatorSequence($parse)

Print the operator calling sequence.

     Parameter  Description
  1  $parse     Parse

executeOperator($parse)

Print the operator calling sequence.

     Parameter  Description
  1  $parse     Parse

Hash Definitions

Unisyn::Parse Definition

Description of parse

Output fields

address8

Address of source string as utf8

arena

Arena containing tree

fails

Number of failures encountered in this parse

operators

Methods implementing each lexical operator

parse

Offset to the head of the parse tree

quarks

Quarks representing the strings used in this parse

size8

Size of source string as utf8

source32

Source text as utf32

sourceLength32

Length of utf32 string

sourceSize32

Size of utf32 allocation

width

Size of entries in exec chain

Private Methods

getAlpha($register, $address, $index)

Load the position of a lexical item in its alphabet from the current character.

     Parameter  Description
  1  $register  Register to load
  2  $address   Address of start of string
  3  $index     Index into string

getLexicalCode($register, $address, $index)

Load the lexical code of the current character in memory into the specified register.

     Parameter  Description
  1  $register  Register to load
  2  $address   Address of start of string
  3  $index     Index into string

putLexicalCode($register, $address, $index, $code)

Put the specified lexical code into the current character in memory.

     Parameter  Description
  1  $register  Register used to load code
  2  $address   Address of string
  3  $index     Index into string
  4  $code      Code to put

loadCurrentChar()

Load the details of the character currently being processed so that we have the index of the character in the upper half of the current character and the lexical type of the character in the lowest byte.

checkStackHas($depth)

Check that we have at least the specified number of elements on the stack.

     Parameter  Description
  1  $depth     Number of elements required on the stack

pushElement()

Push the current element on to the stack.

pushEmpty()

Push the empty element on to the stack.

lexicalNameFromLetter($l)

Lexical name for a lexical item described by its letter.

     Parameter  Description
  1  $l         Letter of the lexical item

lexicalNumberFromLetter($l)

Lexical number for a lexical item described by its letter.

     Parameter  Description
  1  $l         Letter of the lexical item

lexicalItemLength($source32, $offset)

Put the length of a lexical item into variable size.

     Parameter  Description
  1  $source32  B<address> of utf32 source representation
  2  $offset    B<offset> to lexical item in utf32

new($depth, $description)

Create a new term in the parse tree rooted on the stack.

     Parameter     Description
  1  $depth        Stack depth to be converted
  2  $description  Text reason why we are creating a new term

error($message)

Write an error message and stop.

     Parameter  Description
  1  $message   Error message

testSet($set, $register)

Test a set of items, setting the Zero Flag is one matches else clear the Zero flag.

     Parameter  Description
  1  $set       Set of lexical letters
  2  $register  Register to test

checkSet($set)

Check that one of a set of items is on the top of the stack or complain if it is not.

     Parameter  Description
  1  $set       Set of lexical letters

reduce($priority)

Convert the longest possible expression on top of the stack into a term at the specified priority.

     Parameter  Description
  1  $priority  Priority of the operators to reduce

reduceMultiple($priority)

Reduce existing operators on the stack.

     Parameter  Description
  1  $priority  Priority of the operators to reduce

accept_a()

Assign.

accept_b()

Open.

accept_B()

Closing parenthesis.

accept_d()

Infix but not assign or semi-colon.

accept_p()

Prefix.

accept_q()

Post fix.

accept_s()

Semi colon.

accept_v()

Variable.

parseExpression()

Parse the string of classified lexical items addressed by register $start of length $length. The resulting parse tree (if any) is returned in r15.

MatchBrackets(@parameters)

Replace the low three bytes of a utf32 bracket character with 24 bits of offset to the matching opening or closing bracket. Opening brackets have even codes from 0x10 to 0x4e while the corresponding closing bracket has a code one higher.

     Parameter    Description
  1  @parameters  Parameters

ClassifyNewLines(@parameters)

Scan input string looking for opportunities to convert new lines into semi colons.

     Parameter    Description
  1  @parameters  Parameters

ClassifyWhiteSpace(@parameters)

Classify white space per: "lib/Unisyn/whiteSpace/whiteSpaceClassification.pl".

     Parameter    Description
  1  @parameters  Parameters

reload($parse, $parameters)

Reload the variables associated with a parse.

     Parameter    Description
  1  $parse       Parse
  2  $parameters  Hash of variable parameters

parseUtf8($parse, @parameters)

Parse a unisyn expression encoded as utf8 and return the parse tree.

     Parameter    Description
  1  $parse       Parse
  2  @parameters  Parameters

printExecChain($parse)

Print the execute chain for a parse

     Parameter  Description
  1  $parse     Parse tree

printLexicalItem($parse, $source32, $offset, $size)

Print the utf8 string corresponding to a lexical item at a variable offset.

     Parameter  Description
  1  $parse     Parse tree
  2  $source32  B<address> of utf32 source representation
  3  $offset    B<offset> to lexical item in utf32
  4  $size      B<size> in utf32 chars of item

showAlphabet($alphabet)

Show an alphabet.

     Parameter  Description
  1  $alphabet  Alphabet name

T($key, $expected, %options)

Parse some text and dump the results.

     Parameter  Description
  1  $key       Key of text to be parsed
  2  $expected  Expected result
  3  %options   Options

C($key, $expected, %options)

Parse some text and print the results.

     Parameter  Description
  1  $key       Key of text to be parsed
  2  $expected  Expected result
  3  %options   Options

Index

1 accept_a - Assign.

2 accept_B - Closing parenthesis.

3 accept_b - Open.

4 accept_d - Infix but not assign or semi-colon.

5 accept_p - Prefix.

6 accept_q - Post fix.

7 accept_s - Semi colon.

8 accept_v - Variable.

9 ascii - Define a method for ascii text.

10 asciiToAssignGreek - Translate ascii to the corresponding letters in the assign greek alphabet.

11 asciiToAssignLatin - Translate ascii to the corresponding letters in the assign latin alphabet.

12 asciiToDyadGreek - Translate ascii to the corresponding letters in the dyad greek alphabet.

13 asciiToDyadLatin - Translate ascii to the corresponding letters in the dyad latin alphabet.

14 asciiToEscaped - Translate ascii to the corresponding letters in the escaped ascii alphabet.

15 asciiToPrefixGreek - Translate ascii to the corresponding letters in the prefix greek alphabet.

16 asciiToPrefixLatin - Translate ascii to the corresponding letters in the prefix latin alphabet.

17 asciiToSuffixGreek - Translate ascii to the corresponding letters in the suffix greek alphabet.

18 asciiToSuffixLatin - Translate ascii to the corresponding letters in the suffix latin alphabet.

19 asciiToVariableGreek - Translate ascii to the corresponding letters in the suffix greek alphabet.

20 asciiToVariableLatin - Translate ascii to the corresponding letters in the suffix latin alphabet.

21 assign - Define a method for an assign operator.

22 bracket - Define a method for a bracket operator.

23 C - Parse some text and print the results.

24 checkSet - Check that one of a set of items is on the top of the stack or complain if it is not.

25 checkStackHas - Check that we have at least the specified number of elements on the stack.

26 ClassifyNewLines - Scan input string looking for opportunities to convert new lines into semi colons.

27 ClassifyWhiteSpace - Classify white space per: "lib/Unisyn/whiteSpace/whiteSpaceClassification.

28 create - Create a new unisyn parse from a utf8 string.

29 dumpParseTree - Dump the parse tree.

30 dyad - Define a method for a dyadic operator.

31 error - Write an error message and stop.

32 executeOperator - Print the operator calling sequence.

33 getAlpha - Load the position of a lexical item in its alphabet from the current character.

34 getLexicalCode - Load the lexical code of the current character in memory into the specified register.

35 lexicalItemLength - Put the length of a lexical item into variable size.

36 lexicalNameFromLetter - Lexical name for a lexical item described by its letter.

37 lexicalNumberFromLetter - Lexical number for a lexical item described by its letter.

38 lexToSub - Map a lexical item to a processing subroutine.

39 loadCurrentChar - Load the details of the character currently being processed so that we have the index of the character in the upper half of the current character and the lexical type of the character in the lowest byte.

40 makeExecutionChain - Traverse the parse tree in post order to create an execution chain.

41 MatchBrackets - Replace the low three bytes of a utf32 bracket character with 24 bits of offset to the matching opening or closing bracket.

42 new - Create a new term in the parse tree rooted on the stack.

43 parseExpression - Parse the string of classified lexical items addressed by register $start of length $length.

44 parseUtf8 - Parse a unisyn expression encoded as utf8 and return the parse tree.

45 prefix - Define a method for a prefix operator.

46 print - Print a parse tree.

47 printExecChain - Print the execute chain for a parse

48 printLexicalItem - Print the utf8 string corresponding to a lexical item at a variable offset.

49 printOperatorSequence - Print the operator calling sequence.

50 pushElement - Push the current element on to the stack.

51 pushEmpty - Push the empty element on to the stack.

52 putLexicalCode - Put the specified lexical code into the current character in memory.

53 reduce - Convert the longest possible expression on top of the stack into a term at the specified priority.

54 reduceMultiple - Reduce existing operators on the stack.

55 reload - Reload the variables associated with a parse.

56 semiColon - Define a method for the semicolon operator which comes in two forms: the explicit semi colon and a new line semicolon.

57 semiColonChar - Translate ascii to the corresponding letters in the escaped ascii alphabet.

58 showAlphabet - Show an alphabet.

59 suffix - Define a method for a suffix operator.

60 T - Parse some text and dump the results.

61 testSet - Test a set of items, setting the Zero Flag is one matches else clear the Zero flag.

62 traverseParseTree - Traverse the terms in parse tree in post order and call the operator subroutine associated with each term.

63 variable - Define a method for a variable.

Installation

This module is written in 100% Pure Perl and, thus, it is easy to read, comprehend, use, modify and install via cpan:

  sudo cpan install Unisyn::Parse

Author

philiprbrenan@gmail.com

http://www.appaapps.com

Copyright

Copyright (c) 2016-2021 Philip R Brenan.

This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 3823:

=pod directives shouldn't be over one line long! Ignoring all 5 lines of content