diff options
Diffstat (limited to 'tcllib/modules/pt/include/example/full.inc')
-rw-r--r-- | tcllib/modules/pt/include/example/full.inc | 54 |
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}]. |