Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <stdlib.h>
- using namespace std;
- /* Abstract class for all types of lexem*/
- class lexeme {
- protected:
- lexeme** children; // part of tree of relations
- int beginPos; // number of position in string, that matches beginning of current lexem
- public:
- virtual void parse (char* str) = 0; // function for parsing string
- virtual int countRes () = 0;
- lexeme() {
- // make union constructor
- }
- };
- class digit : public lexeme {
- private:
- char res;
- public:
- void parse (char* str) {
- }
- int countRes () {
- return 0; // change to atoi(res)
- }
- digit(int _beginPos, char* str) {
- beginPos = _beginPos;
- res = str[beginPos];
- cout << "Read digit: " << res << endl;
- }
- };
- /* Class for summand. Rule: */
- class summand : public lexeme {
- private:
- int index;
- public:
- void parse (char* str) {
- cout<< "Summand parsed";
- if (beginPos <= strlen(str) - 1) {
- int currPos = beginPos;
- index = 0;
- while (str[currPos] != '+' && currPos <= (strlen(str) - 1) ) {
- if (str[currPos] != ' ' ) {
- lexeme *child;
- child = new digit(currPos, str);
- children[index] = child;
- index++;
- }
- currPos++;
- }
- }
- }
- int countRes () {
- int res = 0;
- char* getStr;
- getStr = new char;
- for(int i = 0; i <= index; i++) {
- //getStr = getStr + children[i]->countRes;
- }
- cout << getStr;
- //convert getStr to int and put in res
- return res;
- }
- summand(int _beginPos) {
- beginPos = _beginPos;
- children = new lexeme*;
- }
- };
- /* Class for expression. Rule: */
- class expression : public lexeme {
- private:
- int index;
- public:
- void parse (char* str) {
- if (beginPos != strlen(str)) {
- int currPos = beginPos;
- index = 0;
- while (currPos <= (strlen(str) - 1)) {
- if (str[currPos] != '+') {
- lexeme *child;
- child = new summand(currPos);
- child->parse(str);
- children[index] = child;
- index++;
- while(str[currPos] != '+' && currPos <= (strlen(str) - 1)){
- currPos++;
- }
- } else {
- currPos++;
- }
- }
- }
- }
- expression(int _beginPos) {
- beginPos = _beginPos;
- children = new lexeme*;
- } // init of array
- int countRes () {
- int res = 0;
- for(int i = 0; i <= index; i++) {
- // res = res + children[i]->countRes;
- }
- return res;
- }
- ~expression() {
- // free children
- }
- };
- int main () {
- char* str;
- str = new char;
- cout << "Enter the string: ";
- gets(str);
- cout << str;
- lexeme *expr = new expression(0);
- expr->parse(str);
- cout << "Answer:" << endl;
- cout << expr->countRes;
- system("pause");
- return 2;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement