Create a C++ logic calculator (T/F) using a recursive descent parser

  • Context: C/C++ 
  • Thread starter Thread starter carl123
  • Start date Start date
  • Tags Tags
    C++ Calculator Logic
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 reply · 3K views
carl123
Messages
55
Reaction score
0
I'm supposed to make a simple logic calculator based on the following requirements:

1. The user can use either capital or lower case 'T' and 'F' in their expression.
2. Use either a ';' or '=' to indicate the expression should be evaluated immediately.
3. The program should not exit when it encounters an error in the expression. Rather, it should output error information and then accept the next expression.
4. Use either a capital or lowercase 'Q' to indicate you want to exit the program.
5. Functions for the grammar rules will return type bool
6. You must use a recursive descent parser

Program output should look like this:

T&F = F
f|t = T
(T&f)^(t|F) = T
!F = T
q


This is what I have so far but, I can't figure out why my code won't compile

HTML:
#include <iostream>
#include <vector>
using namespace std;class Token {
	Tokentype   type;
	string      value;
	int     linenum;

public:
	Token(Tokentype t, string v = "") {
		type = t;
		value = v;
	}
	Tokentype getType() { return type; }
	string getValue() { return value; }
	int getLinenum() { return linenum; }
};

vector<string> int_list;
vector<string> float_list;

class PTree {
	PTreeNodetype   type;
	PTree *left;
	PTree *right;
public:
	PTree(PTreeNodetype t, PTree *l = 0, PTree *r = 0) {
		type = t;
		left = l;
		right = r;
	}
	PTreeNodetype getType() { return type; }
};

// expr ::= term PLUS expr | term MINUS expr | term 

PTree *
Expr() {

	PTree *term = Term();
	Token *t;

	if (!term)
		return 0;

	t = getToken();

	if (t == NULL) {
		delete t;
		return 0;
	}
	if (t->getType() != T_SC)
	{
		if (t->getType() == T_RPAREN) {
			pushbacktoken(t);
			return new PTree(EXPR, term);
		}

		if (t->getType() != T_PLUS && t->getType() != T_MINUS)
		{
			count << t->getLinenum() << ":" << "Error:    expected + or -" << endl;
			pushbacktoken(t);
			delete t;
			return 0;
		}

		delete t;
		PTree *expr = Expr();
		if (!expr)
			return 0;

		return new PTree(EXPR, term, expr);
	}
 
Physics news on Phys.org
If code won't compile, the compiler usually indicates which line(s) of code are causing the problem. Often, if you fix the first line that is shown in the list of errors, that can clear up subsequent errors.