00001
#ifndef __MY_AST_H__
00002
# define __MY_AST_H__
00003
00004
#include <antlr/CommonAST.hpp>
00005
00006
class MyAST;
00007
00008
typedef ANTLR_USE_NAMESPACE(antlr)ASTRefCount<
MyAST> RefMyAST;
00009
00015 class
MyAST : public ANTLR_USE_NAMESPACE(antlr)CommonAST {
00016
public:
00017
00018 MyAST(
const MyAST& other )
00019 : CommonAST(other)
00020 , line(other.line)
00021 {
00022 }
00023
00024 MyAST(
void ) : CommonAST(), line(0) {}
00025 virtual ~
MyAST(
void ) {}
00026
00027 virtual int getLine(
void )
const
00028
{
00029
00030
00031
00032
00033
if ( line != 0 )
00034
return line;
00035
if( getFirstChild() )
00036
return ( RefMyAST(getFirstChild())->getLine() );
00037
return 0;
00038 }
00039 virtual void setLine(
int l )
00040 {
00041 line = l;
00042 }
00048 virtual void initialize(
int t,
const ANTLR_USE_NAMESPACE(std)string& txt)
00049 {
00050 CommonAST::initialize(t,txt);
00051 line = 0;
00052 }
00053 virtual void initialize(
ANTLR_USE_NAMESPACE(antlr)RefToken t )
00054 {
00055 CommonAST::initialize(t);
00056 line = t->getLine();
00057 }
00058 virtual void initialize( RefMyAST ast )
00059 {
00060 CommonAST::initialize(
ANTLR_USE_NAMESPACE(antlr)RefAST(ast));
00061 line = ast->getLine();
00062 }
00063
00064 void addChild( RefMyAST c )
00065 {
00066 BaseAST::addChild(
ANTLR_USE_NAMESPACE(antlr)RefAST(c) );
00067 }
00068
00069 void setNextSibling( RefMyAST c )
00070 {
00071 BaseAST::setNextSibling(
ANTLR_USE_NAMESPACE(antlr)RefAST(c) );
00072 }
00073
00074 virtual ANTLR_USE_NAMESPACE(antlr)RefAST clone(
void )
00075 {
00076
return ANTLR_USE_NAMESPACE(antlr)RefAST(
new MyAST(*
this));
00077 }
00078 static ANTLR_USE_NAMESPACE(antlr)RefAST factory(
void )
00079 {
00080
return ANTLR_USE_NAMESPACE(antlr)RefAST(RefMyAST(
new MyAST()));
00081 }
00082
private:
00083 int line;
00084 };
00085
#endif