By default, an AST is either a list (for closures and rules without named elements), or dict-derived object that contains one item for every named element in the grammar rule. Items can be accessed through the standard
dict syntax (
ast['key']), or as attributes (
AST entries are single values if only one item was associated with a name, or lists if more than one item was matched. There’s a provision in the grammar syntax (the
+: operator) to force an AST entry to be a list even if only one element was matched. The value for named elements that were not found during the parse (perhaps because they are optional) is
parseinfo=True keyword argument has been passed to the
Parser constructor, a
parseinfo element is added to AST nodes that are dict-like. The element contains a
collections.namedtuple with the parse information for the node:
ParseInfo = namedtuple( 'ParseInfo', [ 'buffer', 'rule', 'pos', 'endpos', 'line', 'endline', ] )
With the help of the
Buffer.line_info() method, it is possible to recover the line, column, and original text parsed for the node. Note that when
ParseInfo is generated, the
Buffer used during parsing is kept in memory for the lifetime of the AST.
parseinfo can also be controlled using the
@@parseinfo :: True grammar directive.