-
Notifications
You must be signed in to change notification settings - Fork 0
/
expression.h
130 lines (105 loc) · 2.53 KB
/
expression.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* Project: Compiler for imperative programing language IFJ20
*
* File: expression.h
* Brief: Expression proccesing header file
*
* Authors: Hladký Tomáš xhladk15@stud.fit.vutbr.cz
* Kostolányi Adam xkosto04@stud.fit.vutbr.cz
* Makiš Jozef xmakis00@stud.fit.vutbr.cz
* Bartko Jakub xbartk07@stud.fit.vutbr.cz
*/
#ifndef IFJ_BHKM_EXPRESSION_H
#define IFJ_BHKM_EXPRESSION_H
#include "stack.h"
#include "scanner.h"
extern tokenStack * symbolStack; // Symbol stack
extern tokenStack * tokStack; // Token stack
typedef struct parserData
{
tToken *token;
tokenStack *stack;
} tPData;
typedef struct pd_item pd_item_t;
struct pd_item {
tPData * pd;
pd_item_t * next;
};
typedef struct stack_item stack_item_t;
struct stack_item {
tokenStack * ts;
stack_item_t * next;
};
struct frame_stack_t {
pd_item_t * first_pd;
stack_item_t * first_tok;
stack_item_t * first_sym;
} frame_stack;
void frame_stack_init();
void frame_stack_destroy();
void frame_stack_push();
void frame_stack_pop();
/*
* Function returns index of the symbol to choose action from precedence table
*/
int get_index(tToken token);
void print();
void check_func_start();
void check_func();
/*
* Function creates variable in symtable
*/
symtable_value_t create_variable(stackElemPtr elem);
/*
* Function creates destination in symtable for instruction
*/
symtable_value_t create_dest(stackElemPtr elem);
/*
* Function crates unique id
*/
char *create_id();
/*
* Function checks whether the variable is defined
*/
void check_symtable(stackElemPtr elem);
/*
* Function sets data based on token type
*/
void var_data_set(tToken *token, sym_var_item_t *var);
/*
* Function checks whether both token types are string
*/
void check_string(stackElemPtr top, stackElemPtr afterTop, tToken *symbol);
/*
* Function checks whether both token types are same
*/
void check_num(stackElemPtr top, stackElemPtr afterTop);
/*
* Function returns VAR_TYPE
*/
int var_type_check(stackElemPtr elem);
/*
* Function which checks if the term is missing from operation
*/
void check_expr(tToken *token);
/*
* Function shifts the current token to stack and gets next token
*/
void shift();
/*
* Function reduces the expression with rule based on the precedence table
*/
void reduce();
/*
* Function removes parenthesis
*/
void equal();
/*
* Function which free's the memory
*/
void release_resources();
/*
* Main function which parses the expression
*/
symtable_value_t parse_expression();
#endif //IFJ_BHKM_EXPRESSION_H