Converted project to C++
This commit is contained in:
parent
aa7e348552
commit
24e3003c00
8 changed files with 29 additions and 26 deletions
24
Makefile
24
Makefile
|
@ -1,9 +1,11 @@
|
|||
GPP = g++ -Wall
|
||||
|
||||
sloth: src/main.c src/parser/lex.yy.o src/parser/parser.tab.o src/variables/environment.o src/variables/variable.o src/variables/value.o src/operations/node.o src/operations/operators.o src/string.o src/shell.o
|
||||
gcc src/main.c src/parser/lex.yy.o src/parser/parser.tab.o src/variables/environment.o src/variables/variable.o src/variables/value.o src/operations/node.o src/operations/operators.o src/string.o src/shell.o -ledit -o sloth
|
||||
$(GPP) src/main.c src/parser/lex.yy.o src/parser/parser.tab.o src/variables/environment.o src/variables/variable.o src/variables/value.o src/operations/node.o src/operations/operators.o src/string.o src/shell.o -ledit -o sloth
|
||||
src/parser/lex.yy.o: src/parser/lex.yy.c src/parser/parser.tab.h
|
||||
gcc -c src/parser/lex.yy.c -o src/parser/lex.yy.o
|
||||
$(GPP) -c src/parser/lex.yy.c -o src/parser/lex.yy.o
|
||||
src/parser/parser.tab.o: src/parser/parser.tab.c
|
||||
gcc -c src/parser/parser.tab.c -o src/parser/parser.tab.o
|
||||
$(GPP) -c src/parser/parser.tab.c -o src/parser/parser.tab.o
|
||||
src/parser/parser.tab.h: src/parser/parser.y
|
||||
bison -d -o src/parser/parser.tab.c src/parser/parser.y
|
||||
src/parser/parser.tab.c: src/parser/parser.y
|
||||
|
@ -11,18 +13,18 @@ src/parser/parser.tab.c: src/parser/parser.y
|
|||
src/parser/lex.yy.c: src/parser/lexer.l
|
||||
flex -o src/parser/lex.yy.c src/parser/lexer.l
|
||||
src/variables/environment.o: src/variables/environment.h src/variables/environment.c
|
||||
gcc -c src/variables/environment.c -o src/variables/environment.o
|
||||
$(GPP) -c src/variables/environment.c -o src/variables/environment.o
|
||||
src/variables/variable.o: src/variables/variable.h src/variables/variable.c
|
||||
gcc -c src/variables/variable.c -o src/variables/variable.o
|
||||
$(GPP) -c src/variables/variable.c -o src/variables/variable.o
|
||||
src/variables/value.o: src/variables/value.h src/variables/value.h
|
||||
gcc -c src/variables/value.c -o src/variables/value.o
|
||||
$(GPP) -c src/variables/value.c -o src/variables/value.o
|
||||
src/operations/operators.o: src/operations/operators.h src/operations/operators.c
|
||||
gcc -c src/operations/operators.c -o src/operations/operators.o
|
||||
$(GPP) -c src/operations/operators.c -o src/operations/operators.o
|
||||
src/operations/node.o: src/operations/node.h src/operations/node.c
|
||||
gcc -c src/operations/node.c -o src/operations/node.o
|
||||
$(GPP) -c src/operations/node.c -o src/operations/node.o
|
||||
src/shell.o: src/shell.h src/shell.c
|
||||
gcc -c src/shell.c -o src/shell.o
|
||||
$(GPP) -c src/shell.c -o src/shell.o
|
||||
src/string.o: src/string.h src/string.c
|
||||
gcc -c src/string.c -o src/string.o
|
||||
$(GPP) -c src/string.c -o src/string.o
|
||||
clean:
|
||||
rm src/parser/lex.yy.c src/parser/parser.tab.c src/parser/parser.tab.h src/parser/lex.yy.o src/parser/parser.tab.o src/variables/environment.o src/variables/variable.o src/variables/value.o src/operations/node.o src/operations/operators.o src/shell.o sloth
|
||||
rm src/parser/lex.yy.c src/parser/parser.tab.c src/parser/parser.tab.h src/parser/lex.yy.o src/parser/parser.tab.o src/variables/environment.o src/variables/variable.o src/variables/value.o src/operations/node.o src/operations/operators.o src/string.o src/shell.o sloth
|
||||
|
|
|
@ -210,19 +210,19 @@ struct Value* eval_expression(struct Node* node, struct Environment* env) {
|
|||
//----------
|
||||
case AND:
|
||||
check_num_nodes(node, 2, "cannot perform logical operators on more than two expressions.");
|
||||
return and(val1, val2);
|
||||
return and_value(val1, val2);
|
||||
// return val1 && val2;
|
||||
break;
|
||||
//----------
|
||||
case OR:
|
||||
check_num_nodes(node, 2, "cannot perform logical operators on more than two expressions.");
|
||||
return or(val1, val2);
|
||||
return or_value(val1, val2);
|
||||
// return val1 || val2;
|
||||
break;
|
||||
//----------
|
||||
case NOT:
|
||||
check_num_nodes(node, 1, "cannot negate more than one expressions.");
|
||||
return not(val1);
|
||||
return not_value(val1);
|
||||
// return !val1;
|
||||
break;
|
||||
//----------
|
||||
|
|
|
@ -248,7 +248,7 @@ struct Value* not_equals(struct Value* x, struct Value* y) {
|
|||
return ans;
|
||||
}
|
||||
|
||||
struct Value* and(struct Value* x, struct Value* y) {
|
||||
struct Value* and_value(struct Value* x, struct Value* y) {
|
||||
if (!x || !y) { fprintf(stderr, "Error, uninitialized values being used in &&.\n"); }
|
||||
if (x->type != BOOLEAN || y->type != BOOLEAN) { fprintf(stderr, "Error, cannot use and AND operation with a non-boolean.\n"); }
|
||||
if (x->type == STRING || y->type == STRING) { fprintf(stderr, "Error, cannot AND a string.\n"); }
|
||||
|
@ -256,7 +256,7 @@ struct Value* and(struct Value* x, struct Value* y) {
|
|||
return make_boolean(get_long(x) && get_long(y));
|
||||
}
|
||||
|
||||
struct Value* or(struct Value* x, struct Value* y) {
|
||||
struct Value* or_value(struct Value* x, struct Value* y) {
|
||||
if (!x || !y) { fprintf(stderr, "Error, uninitialized values being used in ||.\n"); }
|
||||
if (x->type != BOOLEAN || y->type != BOOLEAN) { fprintf(stderr, "Error, cannot use and OR operation with a non-boolean.\n"); }
|
||||
if (x->type == STRING || y->type == STRING) { fprintf(stderr, "Error, cannot OR a string.\n"); }
|
||||
|
@ -264,7 +264,7 @@ struct Value* or(struct Value* x, struct Value* y) {
|
|||
return make_boolean(get_long(x) || get_long(y));
|
||||
}
|
||||
|
||||
struct Value* not(struct Value* x) {
|
||||
struct Value* not_value(struct Value* x) {
|
||||
if (!x) { fprintf(stderr, "Error, uninitialized values being used in !.\n"); }
|
||||
if (x->type != BOOLEAN) { fprintf(stderr, "Error, cannot NOT a non-boolean.\n"); }
|
||||
if (x->type == STRING) { fprintf(stderr, "Error, cannot negate a string.\n"); }
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#ifndef OPERATORS_H
|
||||
#define OPERATORS_H
|
||||
#include "../variables/value.h"
|
||||
|
||||
struct Value* add(struct Value* x, struct Value* y);
|
||||
struct Value* subtract(struct Value* x, struct Value* y);
|
||||
|
@ -11,8 +12,8 @@ struct Value* less_equal(struct Value* x, struct Value* y);
|
|||
struct Value* greater_equal(struct Value* x, struct Value* y);
|
||||
struct Value* equals(struct Value* x, struct Value* y);
|
||||
struct Value* not_equals(struct Value* x, struct Value* y);
|
||||
struct Value* and(struct Value* x, struct Value* y);
|
||||
struct Value* or(struct Value* x, struct Value* y);
|
||||
struct Value* not(struct Value* x);
|
||||
struct Value* and_value(struct Value* x, struct Value* y);
|
||||
struct Value* or_value(struct Value* x, struct Value* y);
|
||||
struct Value* not_value(struct Value* x);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -4,5 +4,6 @@
|
|||
int yywrap( );
|
||||
int yylex( );
|
||||
void yyerror(const char* str);
|
||||
int yyparse (void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "shell.h"
|
||||
#include "parser/parser.h"
|
||||
#include "variables/environment.h"
|
||||
#include "operations/node.h"
|
||||
#include "constants.h"
|
||||
|
||||
|
||||
// For keeping track of command history
|
||||
|
@ -24,9 +26,6 @@ void add_history(char* unused) {}
|
|||
#include <editline/readline.h>
|
||||
#endif
|
||||
|
||||
|
||||
struct Node* result;
|
||||
|
||||
FILE* stringToFile(char* str) { // Creates a temporary file with the given string as its contents
|
||||
int i = 0;
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ char* substring(char* str, int start, int end) {
|
|||
char* substr;
|
||||
int c;
|
||||
int length = end - start;
|
||||
substr = malloc(length + 1);
|
||||
substr = (char*) malloc(length + 1);
|
||||
|
||||
if (substr == NULL) {
|
||||
fprintf(stderr, "Unable to allocate memory for substring.\n");
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "../parser/parser.tab.h"
|
||||
|
||||
|
||||
struct Value* make_value(int type, long num, double dec, struct Node* expr, char* str) {
|
||||
struct Value* make_value(TypeTag type, long num, double dec, struct Node* expr, char* str) {
|
||||
/* allocate space */
|
||||
struct Value* val = (struct Value*) malloc(sizeof(struct Value));
|
||||
|
||||
|
|
Reference in a new issue