ASTFactory Class Reference

#include <ASTFactory.hpp>


Public Types

typedef factory_type_ factory_type
typedef factory_descriptor_ factory_descriptor
typedef factory_descriptor_list_ factory_descriptor_list

Public Member Functions

 ASTFactory ()
 Make new factory. Per default (Ref)CommonAST instances are generated.
 ASTFactory (const char *factory_node_name, factory_type factory)
virtual ~ASTFactory ()
 Destroy factory.
void registerFactory (int type, const char *ast_name, factory_type factory)
 Register a node factory for the node type type with name ast_name.
void setMaxNodeType (int type)
 Set the maximum node (AST) type this factory may encounter.
void addASTChild (ASTPair &currentAST, RefAST child)
 Add a child to the current AST.
virtual RefAST create ()
 Create new empty AST node. The right default type shou.
RefAST create (int type)
 Create AST node of the right type for 'type'.
RefAST create (int type, const ANTLR_USE_NAMESPACE(std) string &txt)
 Create AST node of the right type for 'type' and initialize with txt.
RefAST create (RefAST tr)
 Create duplicate of tr.
RefAST create (RefToken tok)
 Create new AST node and initialize contents from a token.
RefAST create (const ANTLR_USE_NAMESPACE(std) string &txt, ANTLR_USE_NAMESPACE(std) istream &infile)
 Create new AST node and initialize contents from a stream.
RefAST dup (RefAST t)
RefAST dupList (RefAST t)
 Duplicate tree including siblings of root.
RefAST dupTree (RefAST t)
RefAST make (ANTLR_USE_NAMESPACE(std) vector< RefAST > &nodes)
RefAST make (ASTArray *nodes)
void makeASTRoot (ASTPair &currentAST, RefAST root)
 Make an AST the root of current AST.
void setASTNodeFactory (const char *factory_node_name, factory_type factory)

Protected Member Functions

void loadChildren (ANTLR_USE_NAMESPACE(std) istream &infile, RefAST current)
void loadSiblings (ANTLR_USE_NAMESPACE(std) istream &infile, RefAST current)
bool checkCloseTag (ANTLR_USE_NAMESPACE(std) istream &infile)
RefAST getNodeOfType (unsigned int type)
const char * getASTNodeType (unsigned int type)
 get the name of the node 'type'
factory_type getASTNodeFactory (unsigned int type)

Protected Attributes

factory_descriptor default_factory_descriptor
factory_descriptor_list nodeFactories

Private Member Functions

 ASTFactory (const ASTFactory &)
ASTFactoryoperator= (const ASTFactory &)


Detailed Description

AST Super Factory shared by TreeParser and Parser. This super factory maintains a map of all AST node types to their respective AST factories. One instance should be shared among a parser/treeparser chain.

Todo:
check all this code for possible use of references in stead of RefAST's.

Definition at line 36 of file ASTFactory.hpp.


Member Typedef Documentation

Definition at line 38 of file ASTFactory.hpp.

Definition at line 39 of file ASTFactory.hpp.

typedef factory_descriptor_list_ ASTFactory::factory_descriptor_list

Definition at line 40 of file ASTFactory.hpp.


Constructor & Destructor Documentation

ASTFactory::ASTFactory (  ) 

Make new factory. Per default (Ref)CommonAST instances are generated.

ASTFactory::ASTFactory ( const char *  factory_node_name,
factory_type  factory 
)

Initialize factory with a non default node type. factory_node_name should be the name of the AST node type the factory generates. (should exist during the existance of this ASTFactory instance)

virtual ASTFactory::~ASTFactory (  )  [virtual]

Destroy factory.

ASTFactory::ASTFactory ( const ASTFactory  )  [private]


Member Function Documentation

void ASTFactory::registerFactory ( int  type,
const char *  ast_name,
factory_type  factory 
)

Register a node factory for the node type type with name ast_name.

void ASTFactory::setMaxNodeType ( int  type  ) 

Set the maximum node (AST) type this factory may encounter.

void ASTFactory::addASTChild ( ASTPair currentAST,
RefAST  child 
)

Add a child to the current AST.

virtual RefAST ASTFactory::create (  )  [virtual]

Create new empty AST node. The right default type shou.

RefAST ASTFactory::create ( int  type  ) 

Create AST node of the right type for 'type'.

RefAST ASTFactory::create ( int  type,
const ANTLR_USE_NAMESPACE(std) string &  txt 
)

Create AST node of the right type for 'type' and initialize with txt.

RefAST ASTFactory::create ( RefAST  tr  ) 

Create duplicate of tr.

RefAST ASTFactory::create ( RefToken  tok  ) 

Create new AST node and initialize contents from a token.

RefAST ASTFactory::create ( const ANTLR_USE_NAMESPACE(std) string &  txt,
ANTLR_USE_NAMESPACE(std) istream &  infile 
)

Create new AST node and initialize contents from a stream.

RefAST ASTFactory::dup ( RefAST  t  ) 

Deep copy a single node. This function the new clone() methods in the AST interface. Returns a new RefAST(nullASTptr) if t is null.

RefAST ASTFactory::dupList ( RefAST  t  ) 

Duplicate tree including siblings of root.

RefAST ASTFactory::dupTree ( RefAST  t  ) 

Duplicate a tree, assuming this is a root node of a tree-- duplicate that node and what's below; ignore siblings of root node.

RefAST ASTFactory::make ( ANTLR_USE_NAMESPACE(std) vector< RefAST > &  nodes  ) 

Make a tree from a list of nodes. The first element in the array is the root. If the root is null, then the tree is a simple list not a tree. Handles null children nodes correctly. For example, make(a, b, null, c) yields tree (a b c). make(null,a,b) yields tree (nil a b).

RefAST ASTFactory::make ( ASTArray nodes  ) 

Make a tree from a list of nodes, where the nodes are contained in an ASTArray object. The ASTArray is deleted after use.

Todo:
FIXME! I have a feeling we can get rid of this ugly ASTArray thing

void ASTFactory::makeASTRoot ( ASTPair currentAST,
RefAST  root 
)

Make an AST the root of current AST.

void ASTFactory::setASTNodeFactory ( const char *  factory_node_name,
factory_type  factory 
)

Set a new default AST type. factory_node_name should be the name of the AST node type the factory generates. (should exist during the existance of this ASTFactory instance). Only change factory between parser runs. You might get unexpected results otherwise.

void ASTFactory::loadChildren ( ANTLR_USE_NAMESPACE(std) istream &  infile,
RefAST  current 
) [protected]

void ASTFactory::loadSiblings ( ANTLR_USE_NAMESPACE(std) istream &  infile,
RefAST  current 
) [protected]

bool ASTFactory::checkCloseTag ( ANTLR_USE_NAMESPACE(std) istream &  infile  )  [protected]

RefAST ASTFactory::getNodeOfType ( unsigned int  type  )  [inline, protected]

Definition at line 140 of file ASTFactory.hpp.

const char* ASTFactory::getASTNodeType ( unsigned int  type  )  [inline, protected]

get the name of the node 'type'

Definition at line 145 of file ASTFactory.hpp.

factory_type ASTFactory::getASTNodeFactory ( unsigned int  type  )  [inline, protected]

Definition at line 149 of file ASTFactory.hpp.

ASTFactory& ASTFactory::operator= ( const ASTFactory  )  [private]


Field Documentation

Definition at line 44 of file ASTFactory.hpp.

Definition at line 45 of file ASTFactory.hpp.


The documentation for this class was generated from the following file:

Generated on Tue Mar 31 20:19:25 2009 for ctrump by  doxygen 1.5.6