- #1
carl123
- 56
- 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
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)
{
cout << 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);
}