-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLRItem.cpp
54 lines (40 loc) · 964 Bytes
/
LRItem.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include"LRItem.h"
LRItem::LRItem()
{
}
LRItem::LRItem(Symbol *_asb) :leftPart(_asb){
}
LRItem::LRItem(Symbol *_l, vector<Symbol*> _r):leftPart(_l),rightPart(_r),dotPosition(0){
}
LRItem::LRItem(LRItem* other,Symbol* pre){
leftPart = other->leftPart;
rightPart = other->rightPart;
dotPosition = 0;
preSymbol.insert(pre);
}
LRItem::LRItem(LRItem* other):leftPart(other->leftPart),rightPart(other->rightPart),preSymbol(other->preSymbol),dotPosition(other->dotPosition+1){
}
void LRItem::addSymbolToRight(Symbol *a){
rightPart.push_back(a);
}
void LRItem::addAction(string act) {
action+= act;
}
vector<Symbol*> LRItem::getRight(){
return rightPart;
}
Symbol* LRItem::getLeft(){
return leftPart;
}
Symbol* LRItem::getSymbolAfterDot(){
return rightPart[dotPosition];
}
int LRItem::getDotPosition(){
return dotPosition;
}
set<Symbol*> LRItem::getPreSymbol(){
return preSymbol;
}
void LRItem::addPreSymbol(Symbol* pre){
preSymbol.insert(pre);
}