Abstract Syntax Tree
The name and location offset (in bytes) are part of AST objects common capabilities. However, terminals have the ability to retrieve values, and non-terminal contain descendants.
As you can see, each node has the __toString
method, so the XML string
of these rules is just a representation of their internal structure.
An abstract syntax tree provides a set of classes that can be represented in one of two ways:
AST Builder
You can independently determine the rules for constructing AST using custom builder.
use Phplrt\Parser\Builder\BuilderInterface;
use Phplrt\Parser\Context;
class MyBuilder implements BuilderInterface
{
public function build(Context $ctx, $children)
{
switch ($ctx->getState()) {
case 0: return new MyExampleNode($children);
case 1: return new MyAnotherExampleNode($children);
}
return null;
}
}
Usage
use Phplrt\Parser\Parser;
$parser = new Parser($lexer, $grammar, [
Parser::CONFIG_AST_BUILDER => new MyBuilder()
]);