grammar::peg::interp(3tclGrammar operations and usaggrammar::peg::interp(3tcl)
______________________________________________________________________________
NAME
grammar::peg::interp - Interpreter for parsing expression grammars
SYNOPSIS
package require Tcl 8.4
package require grammar::mengine ?0.1?
package require grammar::peg::interp ?0.1.1?
::grammar::peg::interp::setup peg
::grammar::peg::interp::parse nextcmd errorvar astvar
______________________________________________________________________________
DESCRIPTION
This package provides commands for the controlled matching of a charac-
ter stream via a parsing expression grammar and the creation of an ab-
stract syntax tree for the stream and partials.
It is built on top of the virtual machine provided by the package gram-
mar::me::tcl and directly interprets the parsing expression grammar
given to it. In other words, the grammar is not pre-compiled but used
as is.
The grammar to be interpreted is taken from a container object follow-
ing the interface specified by the package grammar::peg::container.
Only the relevant parts are copied into the state of this package.
It should be noted that the package provides exactly one instance of
the interpreter, and interpreting a second grammar requires the user to
either abort or complete a running interpretation, or to put them into
different Tcl interpreters.
Also of note is that the implementation assumes a pull-type handling of
the input. In other words, the interpreter pulls characters from the
input stream as it needs them. For usage in a push environment, i.e.
where the environment pushes new characters as they come we have to put
the engine into its own thread.
THE INTERPRETER API
The package exports the following API
::grammar::peg::interp::setup peg
This command (re)initializes the interpreter. It returns the
empty string. This command has to be invoked first, before any
matching run.
Its argument peg is the handle of an object containing the pars-
ing expression grammar to interpret. This grammar has to be
valid, or an error will be thrown.
::grammar::peg::interp::parse nextcmd errorvar astvar
This command interprets the loaded grammar and tries to match it
against the stream of characters represented by the command pre-
fix nextcmd.
The command prefix nextcmd represents the input stream of char-
acters and is invoked by the interpreter whenever the a new
character from the stream is required. The callback has to re-
turn either the empty list, or a list of 4 elements containing
the token, its lexeme attribute, and its location as line number
and column index, in this order. The empty list is the signal
that the end of the input stream has been reached. The lexeme
attribute is stored in the terminal cache, but otherwise not
used by the machine.
The result of the command is a boolean value indicating whether
the matching process was successful (true), or not (false). In
the case of a match failure error information will be stored
into the variable referenced by errorvar. The variable refer-
enced by astvar will always contain the generated abstract syn-
tax tree, however in the case of an error it will be only par-
tial and possibly malformed.
The abstract syntax tree is represented by a nested list, as de-
scribed in section AST VALUES of document grammar::me_ast.
BUGS, IDEAS, FEEDBACK
This document, and the package it describes, will undoubtedly contain
bugs and other problems. Please report such in the category gram-
mar_peg of the Tcllib Trackers [http://core.tcl.tk/tcllib/reportlist].
Please also report any ideas for enhancements you may have for either
package and/or documentation.
When proposing code changes, please provide unified diffs, i.e the out-
put of diff -u.
Note further that attachments are strongly preferred over inlined
patches. Attachments can be made by going to the Edit form of the
ticket immediately after its creation, and then using the left-most
button in the secondary navigation bar.
KEYWORDS
LL(k), TDPL, context-free languages, expression, grammar, matching,
parsing, parsing expression, parsing expression grammar, push down au-
tomaton, recursive descent, state, top-down parsing languages, trans-
ducer, virtual machine
CATEGORY
Grammars and finite automata
COPYRIGHT
Copyright (c) 2005-2011 Andreas Kupries <andreas_kupries@users.sourceforge.net>
tcllib 0.1.1 grammar::peg::interp(3tcl)