OpenMD  2.5
Molecular Dynamics in the Open
antlr::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. More...
 
 ASTFactory (const char *factory_node_name, factory_type factory)
 
virtual ~ASTFactory ()
 Destroy factory. More...
 
void registerFactory (int type, const char *ast_name, factory_type factory)
 Register a node factory for the node type type with name ast_name. More...
 
void setMaxNodeType (int type)
 Set the maximum node (AST) type this factory may encounter. More...
 
void addASTChild (ASTPair &currentAST, RefAST child)
 Add a child to the current AST. More...
 
virtual RefAST create ()
 Create new empty AST node. The right default type shou. More...
 
RefAST create (int type)
 Create AST node of the right type for 'type'. More...
 
RefAST create (int type, const std ::string &txt)
 Create AST node of the right type for 'type' and initialize with txt. More...
 
RefAST create (RefAST tr)
 Create duplicate of tr. More...
 
RefAST create (RefToken tok)
 Create new AST node and initialize contents from a token. More...
 
RefAST create (const std ::string &txt, std ::istream &infile)
 Create new AST node and initialize contents from a stream. More...
 
RefAST dup (RefAST t)
 
RefAST dupList (RefAST t)
 Duplicate tree including siblings of root. More...
 
RefAST dupTree (RefAST t)
 
RefAST make (std ::vector< RefAST > &nodes)
 
RefAST make (ASTArray *nodes)
 
void makeASTRoot (ASTPair &currentAST, RefAST root)
 Make an AST the root of current AST. More...
 
void setASTNodeFactory (const char *factory_node_name, factory_type factory)
 

Protected Member Functions

void loadChildren (std ::istream &infile, RefAST current)
 
void loadSiblings (std ::istream &infile, RefAST current)
 
bool checkCloseTag (std ::istream &infile)
 
RefAST getNodeOfType (unsigned int type)
 
const char * getASTNodeType (unsigned int type)
 get the name of the node 'type' More...
 
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

◆ factory_descriptor

◆ factory_descriptor_list

◆ factory_type

Definition at line 38 of file ASTFactory.hpp.

Constructor & Destructor Documentation

◆ ASTFactory() [1/3]

antlr::ASTFactory::ASTFactory ( )

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

Initialize factory.

AST Support code shared by TreeParser and Parser. We use delegation to share code (and have only one bit of code to maintain) rather than subclassing or superclassing (forces AST support code to be loaded even when you don't want to do AST stuff).

This class collects all factories of AST types used inside the code. New AST node types are registered with the registerFactory method. On creation of an ASTFactory object a default AST node factory may be specified.

When registering types gaps between different types are filled with entries for the default factory.

Definition at line 39 of file ASTFactory.cpp.

◆ ASTFactory() [2/3]

antlr::ASTFactory::ASTFactory ( const char *  factory_node_name,
factory_type  fact 
)

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)

Definition at line 49 of file ASTFactory.cpp.

References default_factory_descriptor, antlr::Token::MIN_USER_TYPE, and nodeFactories.

◆ ~ASTFactory()

antlr::ASTFactory::~ASTFactory ( )
virtual

Destroy factory.

Delete ASTFactory.

Definition at line 56 of file ASTFactory.cpp.

References default_factory_descriptor, and nodeFactories.

◆ ASTFactory() [3/3]

antlr::ASTFactory::ASTFactory ( const ASTFactory )
private

Member Function Documentation

◆ addASTChild()

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

Add a child to the current AST.

Add a child to the current AST

Definition at line 161 of file ASTFactory.cpp.

References antlr::ASTPair::advanceChildToEnd(), antlr::ASTPair::child, antlr::ASTPair::root, antlr::AST::setFirstChild(), and antlr::AST::setNextSibling().

◆ checkCloseTag()

bool antlr::ASTFactory::checkCloseTag ( std ::istream &  infile)
protected

Referenced by setASTNodeFactory().

◆ create() [1/6]

RefAST antlr::ASTFactory::create ( )
virtual

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

Create a new empty AST node; if the user did not specify an AST node type, then create a default one: CommonAST.

Definition at line 95 of file ASTFactory.cpp.

References antlr::Token::INVALID_TYPE, nodeFactories, and antlr::AST::setType().

Referenced by create(), and setASTNodeFactory().

◆ create() [2/6]

RefAST antlr::ASTFactory::create ( int  type)

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

Definition at line 102 of file ASTFactory.cpp.

References antlr::AST::initialize(), and nodeFactories.

◆ create() [3/6]

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

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

Definition at line 109 of file ASTFactory.cpp.

References ANTLR_USE_NAMESPACE, create(), fact, antlr::AST::initialize(), and nodeFactories.

◆ create() [4/6]

RefAST antlr::ASTFactory::create ( RefAST  tr)

Create duplicate of tr.

Create a new empty AST node; if the user did not specify an AST node type, then create a default one: CommonAST.

Definition at line 140 of file ASTFactory.cpp.

References antlr::AST::getType(), antlr::AST::initialize(), nodeFactories, and antlr::nullAST.

◆ create() [5/6]

RefAST antlr::ASTFactory::create ( RefToken  tok)

Create new AST node and initialize contents from a token.

Definition at line 152 of file ASTFactory.cpp.

References antlr::Token::getType(), antlr::AST::initialize(), and nodeFactories.

◆ create() [6/6]

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

Create new AST node and initialize contents from a stream.

◆ dup()

RefAST antlr::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.

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

Definition at line 191 of file ASTFactory.cpp.

References antlr::AST::clone(), and antlr::nullASTptr.

Referenced by dupTree().

◆ dupList()

RefAST antlr::ASTFactory::dupList ( RefAST  t)

Duplicate tree including siblings of root.

Duplicate tree including siblings of root.

Definition at line 200 of file ASTFactory.cpp.

References dupTree(), antlr::AST::getNextSibling(), and antlr::AST::setNextSibling().

Referenced by dupTree().

◆ dupTree()

RefAST antlr::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.

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

Definition at line 217 of file ASTFactory.cpp.

References dup(), dupList(), antlr::AST::getFirstChild(), and antlr::AST::setFirstChild().

Referenced by dupList().

◆ getASTNodeFactory()

factory_type antlr::ASTFactory::getASTNodeFactory ( unsigned int  type)
inlineprotected

Definition at line 149 of file ASTFactory.hpp.

◆ getASTNodeType()

const char* antlr::ASTFactory::getASTNodeType ( unsigned int  type)
inlineprotected

get the name of the node 'type'

Definition at line 145 of file ASTFactory.hpp.

◆ getNodeOfType()

RefAST antlr::ASTFactory::getNodeOfType ( unsigned int  type)
inlineprotected

Definition at line 140 of file ASTFactory.hpp.

References OpenMD::second.

◆ loadChildren()

void antlr::ASTFactory::loadChildren ( std ::istream &  infile,
RefAST  current 
)
protected

Referenced by setASTNodeFactory().

◆ loadSiblings()

void antlr::ASTFactory::loadSiblings ( std ::istream &  infile,
RefAST  current 
)
protected

Referenced by setASTNodeFactory().

◆ make() [1/2]

RefAST antlr::ASTFactory::make ( 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).

Definition at line 232 of file ASTFactory.cpp.

References antlr::AST::getFirstChild(), antlr::AST::getNextSibling(), antlr::nullASTptr, antlr::AST::setFirstChild(), and antlr::AST::setNextSibling().

Referenced by make().

◆ make() [2/2]

RefAST antlr::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

Make a tree from a list of nodes, where the nodes are contained in an ASTArray object

Definition at line 276 of file ASTFactory.cpp.

References antlr::ASTArray::array, and make().

◆ makeASTRoot()

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

Make an AST the root of current AST.

Definition at line 284 of file ASTFactory.cpp.

References antlr::AST::addChild(), antlr::ASTPair::advanceChildToEnd(), antlr::ASTPair::child, and antlr::ASTPair::root.

◆ operator=()

ASTFactory& antlr::ASTFactory::operator= ( const ASTFactory )
private

◆ registerFactory()

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

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

Register a factory for a given AST type.

Definition at line 69 of file ASTFactory.cpp.

References ANTLR_USE_NAMESPACE, default_factory_descriptor, antlr::Token::MIN_USER_TYPE, and nodeFactories.

◆ setASTNodeFactory()

void antlr::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.

Definition at line 298 of file ASTFactory.cpp.

References antlr::AST::addChild(), ANTLR_USE_NAMESPACE, checkCloseTag(), create(), default_factory_descriptor, antlr::eatwhite(), loadChildren(), loadSiblings(), antlr::nullAST, antlr::read_identifier(), antlr::AST::setNextSibling(), and antlr::AST::typeName().

◆ setMaxNodeType()

void antlr::ASTFactory::setMaxNodeType ( int  type)

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

Definition at line 86 of file ASTFactory.cpp.

References default_factory_descriptor, and nodeFactories.

Member Data Documentation

◆ default_factory_descriptor

factory_descriptor antlr::ASTFactory::default_factory_descriptor
protected

◆ nodeFactories

factory_descriptor_list antlr::ASTFactory::nodeFactories
protected

Definition at line 45 of file ASTFactory.hpp.

Referenced by ASTFactory(), create(), registerFactory(), setMaxNodeType(), and ~ASTFactory().


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