[comment {-*- text -*- doctools manpage}]
[manpage_begin pt_introduction n 1.1]
[include include/module.inc]
[titledesc {Introduction to Parser Tools}]
[description]

Welcome to the Parser Tools, a system for the creation and
manipulation of parsers and the grammars driving them.

[para]

What are your goals which drove you here ?

[list_begin enumerated]
[enum]
Do you simply wish to create a parser for some language ?

[para]
In that case have a look at our parser generator application,
[cmd pt], or, for a slightly deeper access, the package underneath it,
[package pt::pgen].

[enum]
Do you wish to know more about the architecture of the system ?

[para]
This is described in the section
[sectref {Parser Tools Architecture}], below

[enum]
Is your interest in the theoretical background upon which the packages
and tools are build ?

[para]
See the [manpage {Introduction to Parsing Expression Grammars}].

[list_end]

[section {Parser Tools Architecture}]

The system can be split into roughly three layers, as seen in the
figure below

[para][image architecture][para]

These layers are, from high to low:

[list_begin enumerated]
[enum]

At the top we have the application and the packages using the packages
of the layer below to implement common usecases. One example is the
aforementioned [package pt::pgen] which provides a parser generator.

[para]

The list of packages belonging to this layer can be found in section
[sectref {User Packages}]

[enum]

In this layer we have the packages which provide the core of the
functionality for the whole system. They are, in essence, a set of
blocks which can be combined in myriad ways, like Lego (tm). The
packages in the previous level are 'just' pre-fabricated combinations
to cover the most important use cases.

[para]

The list of packages belonging to this layer can be found in section
[sectref {Core Packages}]

[enum]

Last, but not least is the layer containing support packages providing
generic functionality which not necessarily belong into the module.

[para]

The list of packages belonging to this layer can be found in section
[sectref {Support Packages}]

[list_end]

[subsection {User Packages}]
[list_begin definitions]
[def [package pt::pgen]]
[list_end]

[subsection {Core Packages}]

This layer is further split into six sections handling the storage,
import, export, transformation, and execution of grammars, plus
grammar specific support packages.

[list_begin definitions]
[def Storage]
[list_begin definitions][comment {----- core storage ---}]
[def [package pt::peg::container]]
[list_end][comment {------------------- core storage ---}]

[def Export]
[list_begin definitions][comment {----- core export ---}]
[def [package pt::peg::export]]
[def [package pt::peg::export::container]]
[def [package pt::peg::export::json]]
[def [package pt::peg::export::peg]]
[def [package pt::peg::to::container]]
[def [package pt::peg::to::json]]
[def [package pt::peg::to::peg]]
[def [package pt::peg::to::param]]
[def [package pt::peg::to::tclparam]]
[def [package pt::peg::to::cparam]]
[list_end][comment {------------------- core export ---}]

[def Import]
[list_begin definitions][comment {----- core import ---}]
[def [package pt::peg::import]]
[def [package pt::peg::import::container]]
[def [package pt::peg::import::json]]
[def [package pt::peg::import::peg]]
[def [package pt::peg::from::container]]
[def [package pt::peg::from::json]]
[def [package pt::peg::from::peg]]
[list_end][comment {------------------- core import ---}]

[def Transformation]
[def Execution]
[list_begin definitions][comment {----- core execution ---}]
[def [package pt::peg::interp]]
[def [package pt::rde]]
[list_end][comment {------------------- core execution ---}]

[def Support]
[list_begin definitions][comment {----- core support ---}]
[def [package pt::tclparam::configuration::snit]]
[def [package pt::tclparam::configuration::tcloo]]
[def [package pt::cparam::configuration::critcl]]
[def [package pt::ast]]
[def [package pt::pe]]
[def [package pt::peg]]
[list_end][comment {------------------- core support ---}]
[list_end]

[subsection {Support Packages}]
[list_begin definitions]
[def [package pt::peg::container::peg]]
[def [package text::write]]
[def [package configuration]]
[def [package paths]]
[def [package char]]
[list_end]

[include include/feedback.inc]
[manpage_end]
