summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/pt/include/example/full.inc
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/pt/include/example/full.inc')
-rw-r--r--tcllib/modules/pt/include/example/full.inc54
1 files changed, 54 insertions, 0 deletions
diff --git a/tcllib/modules/pt/include/example/full.inc b/tcllib/modules/pt/include/example/full.inc
new file mode 100644
index 0000000..8c1698a
--- /dev/null
+++ b/tcllib/modules/pt/include/example/full.inc
@@ -0,0 +1,54 @@
+
+In this section we are working a complete example, starting with a PEG
+grammar and ending with running the parser generated from it over some
+input, following the outline shown in the figure below:
+
+[para][image flow][para]
+
+Our grammar, assumed to the stored in the file [file calculator.peg]
+is
+
+[include expr_peg.inc]
+
+From this we create a snit-based parser
+
+[include full_[vset MODE].inc]
+
+which leaves us with the parser package and class written to the file
+[file calculator.tcl].
+
+Assuming that this package is then properly installed in a place where
+Tcl can find it we can now use this class via a script like
+
+[include parser_use.inc]
+
+where the abstract syntax tree stored in the variable will look like
+
+[para][include expr_ast.inc][para]
+
+assuming that the input file and channel contained the text
+
+[example { 120+5 }]
+
+A more graphical representation of the tree would be
+
+[para][image expr_ast][para]
+
+Regardless, at this point it is the user's responsibility to work with
+the tree to reach whatever goal she desires. I.e. analyze it,
+transform it, etc. The package [package pt::ast] should be of help
+here, providing commands to walk such ASTs structures in various ways.
+
+[para]
+
+One important thing to note is that the parsers used here return a
+data structure representing the structure of the input per the grammar
+underlying the parser. There are [emph no] callbacks during the
+parsing process, i.e. no [term {parsing actions}], as most other
+parsers will have.
+
+[para]
+
+Going back to the last snippet of code, the execution of the parser
+for some input, note how the parser instance follows the specified
+[term {Parser API}].