Added clone method and pointer location to toString in ParseRule

This commit is contained in:
Nathan Braswell
2013-05-20 23:26:15 -04:00
parent 200cff6ab4
commit 14fc410e00
2 changed files with 27 additions and 0 deletions

View File

@@ -14,11 +14,16 @@
class ParseRule {
public:
ParseRule();
ParseRule(Symbol* leftHandle, int pointerIndex, std::vector<Symbol*> &rightSide);
~ParseRule();
ParseRule* clone();
void setLeftHandle(Symbol* leftHandle);
void appendToRight(Symbol* appendee);
bool advancePointer();
std::string toString();
std::string toDOT();

View File

@@ -5,10 +5,20 @@ ParseRule::ParseRule() {
leftHandle = NULL;
}
ParseRule::ParseRule(Symbol* leftHandle, int pointerIndex, std::vector<Symbol*> &rightSide) {
this->leftHandle = leftHandle;
this->pointerIndex = pointerIndex;
this->rightSide = rightSide;
}
ParseRule::~ParseRule() {
}
ParseRule* ParseRule::clone() {
return( new ParseRule(leftHandle, pointerIndex, rightSide) );
}
void ParseRule::setLeftHandle(Symbol* leftHandle) {
this->leftHandle = leftHandle;
}
@@ -17,11 +27,23 @@ void ParseRule::appendToRight(Symbol* appendee) {
rightSide.push_back(appendee);
}
bool ParseRule::advancePointer() {
if (pointerIndex < rightSide.size()) {
pointerIndex++;
return true;
}
return false;
}
std::string ParseRule::toString() {
std::string concat = leftHandle->toString() + " -> ";
for (int i = 0; i < rightSide.size(); i++) {
if (i == pointerIndex)
concat += "(*) ";
concat += rightSide[i]->toString() + " ";
}
if (pointerIndex >= rightSide.size())
concat += "(*)";
return(concat);
}