Skip to content

Commit 0d515dd

Browse files
committed
Add Stack implementation
1 parent 636e7e8 commit 0d515dd

File tree

3 files changed

+68
-4
lines changed

3 files changed

+68
-4
lines changed

‎Makefile

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,20 @@ ast:
4040

4141
# Compile files in _03_pc_2_out directory
4242

43-
pc_to_out: pseudo_code_lex pseudo_code interpreter
43+
pc_to_out: pseudo_code_lex stack pseudo_code interpreter
4444
cd ${PC_2_OUT_DIR}; \
45-
gcc -o interpreter lex.yy.o interpreter.o pseudo_code.o; \
45+
gcc -o interpreter lex.yy.o interpreter.o pseudo_code.o stack.o; \
4646
mv interpreter ${TARGET_DIR}/interpreter
4747

4848
pseudo_code_lex:
4949
cd ${PC_2_OUT_DIR}; \
5050
flex _pseudo_code.lex; \
5151
gcc -c lex.yy.c
5252

53+
stack:
54+
cd ${PC_2_OUT_DIR}; \
55+
gcc -c stack.c
56+
5357
pseudo_code:
5458
cd ${PC_2_OUT_DIR}; \
5559
gcc -c pseudo_code.c
@@ -62,15 +66,15 @@ interpreter:
6266

6367
clean: clean_in_to_ri clean_pc_to_out
6468

65-
# Compile files in _01_in_2_ri directory
69+
# Clean _01_in_2_ri directory
6670

6771
clean_in_to_ri:
6872
rm ${IN_2_RI_DIR}/lex.yy.c
6973
rm ${IN_2_RI_DIR}/*.o
7074

7175
# ---------------------------------------
7276

73-
# Compile files in _03_pc_2_out directory
77+
# Clean _03_pc_2_out directory
7478

7579
clean_pc_to_out:
7680
rm ${PC_2_OUT_DIR}/lex.yy.c

‎_03_pc_2_out/stack.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include <stdlib.h>
2+
#include "stack.h"
3+
4+
_stack _stack_init() {
5+
return NULL;
6+
}
7+
8+
_stack _stack_push(_stack stack, _stack_node_type type, _stack_node_value value) {
9+
_stack_node *node = (_stack_node *) malloc(sizeof(_stack_node));
10+
node->element.type = type;
11+
node->element.value = value;
12+
node->next = stack;
13+
return node;
14+
}
15+
16+
_stack _stack_pop(_stack stack) {
17+
_stack_node *toFree = stack;
18+
stack = stack->next;
19+
free(toFree);
20+
return stack;
21+
}
22+
23+
_stack_node_element _stack_peek(_stack stack) {
24+
return stack->element;
25+
}

‎_03_pc_2_out/stack.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#ifndef STACK_H
2+
#define STACK_H
3+
4+
typedef enum {
5+
STACK_NODE_NUMBER,
6+
STACK_NODE_STRING
7+
} _stack_node_type;
8+
9+
typedef union {
10+
char *variable;
11+
char *string;
12+
double number;
13+
} _stack_node_value;
14+
15+
typedef struct {
16+
_stack_node_type type;
17+
_stack_node_value value;
18+
} _stack_node_element;
19+
20+
typedef struct _stack_node {
21+
_stack_node_element element;
22+
struct _stack_node *next;
23+
} _stack_node;
24+
25+
typedef _stack_node *_stack;
26+
27+
_stack _stack_init();
28+
29+
_stack _stack_push(_stack stack, _stack_node_type type, _stack_node_value value);
30+
31+
_stack _stack_pop(_stack stack);
32+
33+
_stack_node_element _stack_peek(_stack stack);
34+
35+
#endif

0 commit comments

Comments
 (0)