This repository has been archived by the owner on Feb 26, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
RG_Production.cpp
124 lines (110 loc) · 2.53 KB
/
RG_Production.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
* @file RG_Production.cpp
* @author Yacine Smaoui, Florian Hemmelgarn
*
* @brief Implementation of the Production class
*/
#include "RG_Production.h"
#include <sstream>
/**
* @brief Constructor
*/
Production::Production()
{
/*
cout << "****Production constructor called: constructing Production" << endl ;
*/
}
/**
* @brief Destructor
*/
Production::~Production()
{
/*
cout << "**Production destructor called: destructing Production" << endl ;
*/
}
/**
* @brief A setter Method to set the Production's Substitution (the right Side).
* @param subs a pointer on a Substitution Object.
*/
void Production::setSubstitution(Substitution* subs)
{
this->right = subs;
}
/**
* @brief A setter Method to set the Production's left Side.
* @param s A Non-Terminal Symbol.
*/
void Production::setLeftSide(string s)
{
this->left = s ;
}
/**
* @brief A getter Method
* @return a pointer on the Production's Substitution.
*/
Substitution* Production::getSubstitution()
{
return this->right ;
}
/**
* @brief called by the Reader
*
* Separates the read Production line into a left side string and a right side string.
*
* @param line a string containing the whole Production (directly read from file).
* @param productionArrow the Separating Symbol between the left and right Side of a production
*/
void Production::readProductionFromLine(string line, string productionArrow)
{
stringstream stream;
string wordString;
stream << line;
while(!stream.eof())
{
stream >> wordString ;
if(wordString.compare(productionArrow)==0)
{
string rawSubstitutionString = "";
while(!stream.eof())
{
stream >> wordString;
rawSubstitutionString += wordString ;
if(!stream.eof())
{
rawSubstitutionString += " ";
}
}
this->getSubstitution()->setRawString(rawSubstitutionString);
}
else
{
this->setLeftSide(wordString);
}
}
}
/**
* @brief returns a string form of the Production
* @return Production as a string
*/
string Production::toString()
{
return this->left + " " + PRODUCTIONARROW + " " + this->getSubstitution()->toString() ;
}
/**
*@brief prints the Production
*/
void Production::printProduction()
{
//cout << this->left << " --> " << this->getSubstitution()->toString() << endl;
cout << this->toString() << endl;
}
/**
* @brief returns the left side of a Production
* @return the leftSide of a Production
*/
string Production::getLeftSide()
{
return this->left;
}