Tom Kelliher, CS23
May 6, 1996
I'll quickly fake up a symbol table so that the operators can be tested.
The abstract base class statement:
class Statement
{
protected:
int label;
public:
Statement(int l) : label(l) {}
virtual void Perform(void) = 0;
virtual void Display(void) = 0;
};
Some statement hash table declarations:
typedef Statement* SListP;
struct SListItem
{
SListItem* next;
SListP stmt;
};
A small example:
#include <iostream.h>
class abstract
{
protected:
int i;
public:
abstract(int val) : i(val) {}
virtual void display(void) = 0;
};
class derived : public abstract
{
public:
derived(int val) : abstract(val) {}
virtual void display(void)
{
cout << i << endl;
}
};
int main()
{
abstract* p;
p = new derived(4321);
p->display();
return 0;
}
Open the program file (command line argument).
Parse statements, creating appropriate class instances and inserting
into hash table for the program.
pc = 0
while (forever)
get the statement whose label has value pc.
if there is such a statement
++pc
execute the statement, passing pc for possible modification.
else
++pc
end if
end while