DESCRIPTION
This document describes the form of a parse tree as used between the various Zoidberg objects.
Example
# Commandline input:
$ ls -al | perl{ while (<STDIN>) { print $_ } }abc && echo done
# Would be parsed to:
[
[qw/SH ls -al/],
[ [qw/PERL abc/], q{ while (<STDIN>) { print $_ } } ],
'AND',
[qw/SH echo done/]
]
# Commandline input:
$ cd .. && ls -al ; cp dus ~/tmp/ &
# Would be parsed to:
[
[qw/CMD cd ../],
'AND',
[qw/SH ls -al/],
'EOS', # End Of Statement
[qw{SH cp dus ~/tmp/}],
'BGS' # BackGround Statement
]
# FIXME an example with redirections
Basics
A parse tree is an array consisting of blocks and tokens. A block can be any kind of code and is stored in a nested array. Blocks directly following each other are supposted to be a pipeline. A token is a delimiter between blocks.
The first field of a block contains information about the block, all other field in a block make up the content. The most important information about a block is the context, which tells the parser how to execute the block. This first field can be:
a scalar ==> it is the context name
a nested array ==> the first field is the context name
a nested hash ==> the key 'context' contains the context name
You are free to store all kinds of specific information in this first field as long as it contains a context name.