Added clone method and pointer location to toString in ParseRule
This commit is contained in:
@@ -14,11 +14,16 @@
|
|||||||
class ParseRule {
|
class ParseRule {
|
||||||
public:
|
public:
|
||||||
ParseRule();
|
ParseRule();
|
||||||
|
ParseRule(Symbol* leftHandle, int pointerIndex, std::vector<Symbol*> &rightSide);
|
||||||
~ParseRule();
|
~ParseRule();
|
||||||
|
|
||||||
|
ParseRule* clone();
|
||||||
|
|
||||||
void setLeftHandle(Symbol* leftHandle);
|
void setLeftHandle(Symbol* leftHandle);
|
||||||
void appendToRight(Symbol* appendee);
|
void appendToRight(Symbol* appendee);
|
||||||
|
|
||||||
|
bool advancePointer();
|
||||||
|
|
||||||
std::string toString();
|
std::string toString();
|
||||||
std::string toDOT();
|
std::string toDOT();
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,20 @@ ParseRule::ParseRule() {
|
|||||||
leftHandle = NULL;
|
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() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ParseRule* ParseRule::clone() {
|
||||||
|
return( new ParseRule(leftHandle, pointerIndex, rightSide) );
|
||||||
|
}
|
||||||
|
|
||||||
void ParseRule::setLeftHandle(Symbol* leftHandle) {
|
void ParseRule::setLeftHandle(Symbol* leftHandle) {
|
||||||
this->leftHandle = leftHandle;
|
this->leftHandle = leftHandle;
|
||||||
}
|
}
|
||||||
@@ -17,11 +27,23 @@ void ParseRule::appendToRight(Symbol* appendee) {
|
|||||||
rightSide.push_back(appendee);
|
rightSide.push_back(appendee);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ParseRule::advancePointer() {
|
||||||
|
if (pointerIndex < rightSide.size()) {
|
||||||
|
pointerIndex++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
std::string ParseRule::toString() {
|
std::string ParseRule::toString() {
|
||||||
std::string concat = leftHandle->toString() + " -> ";
|
std::string concat = leftHandle->toString() + " -> ";
|
||||||
for (int i = 0; i < rightSide.size(); i++) {
|
for (int i = 0; i < rightSide.size(); i++) {
|
||||||
|
if (i == pointerIndex)
|
||||||
|
concat += "(*) ";
|
||||||
concat += rightSide[i]->toString() + " ";
|
concat += rightSide[i]->toString() + " ";
|
||||||
}
|
}
|
||||||
|
if (pointerIndex >= rightSide.size())
|
||||||
|
concat += "(*)";
|
||||||
return(concat);
|
return(concat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user