-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparserDef.h
More file actions
154 lines (120 loc) · 3.12 KB
/
parserDef.h
File metadata and controls
154 lines (120 loc) · 3.12 KB
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// BATCH NUMBER - 57
// Authors:-
// Rishabh Singh 2012B4A7691P f2012691@pilani.bits-pilani.ac.in
// Anchit Jain 2012B3A7570P f2012570@pilani.bits-pilani.ac.in
#ifndef COMPILER_PARSERDEF_H
#define COMPILER_PARSERDEF_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NUM_RULES 90
#define MAX_LEN 25
typedef struct trienode{
int num;
int isleaf;
int id;
struct trienode *child[90];
}trieNode;
//////////////////////////////////////// Structure of Symbol /////////////////////////////////////
typedef struct symbol
{
char name[MAX_LEN];
int id;
int isNonTerminal;
}Symbol;
////////////////////////////////// Integer LinkedList Node ///////////////////////////////////////
typedef struct intnode{
struct intnode *prev,*next;
int data;
}intNode;
///////////////////////////////////// Integer LinkedList ////////////////////////////////////////
typedef struct intlinklist{
intNode *head,*tail;
}intLinkedList;
///////////////////////////////////// Node of LinkedList of Symbol ////////////////////////////////
typedef struct node{
struct node *prev,*next;
Symbol data;
}Node;
////////////////////////////////////// LinkedList of Symbol ///////////////////////////////////////
typedef struct linklist{
Node *head,*tail;
}LinkedList;
/////////////////////////////////////// Structure of Rule //////////////////////////////////////////
typedef struct
{
int ruleNo;
Symbol lhs;
LinkedList* rhs;
int lenRhs;
}Rule;
//////////////////////////////////// Structure for grammar /////////////////////////////////////////
typedef struct
{
Rule rule[NUM_RULES];
}Grammar;
typedef struct grammarpair
{
Grammar reducedGrammar;
Grammar totalGrammar;
}Gpair;
/////////////////////////////////// Node for first Set /////////////////////////////////////////////
typedef struct
{
int *arr;
int isNullable;
int start; // Starting Rule Number
int end; // Ending rule Number
char name[MAX_LEN];
}FirstSetNode;
//
////////////////////////////////// Node for Follow Set //////////////////////////////////////////////
typedef struct
{
int *arr;
char name[MAX_LEN];
intLinkedList *occur;
}FollowSetNode;
typedef struct treeListNode treeListNode;
typedef struct parsetree_node ParseTreeNode;
typedef struct stack_node
{
Symbol data;
struct parsetree_node* ParseTreeNode;
struct stack_node *next,*prev;
}Stack_node;
typedef struct stack
{
Stack_node *head,*tail;
}Stack;
struct treeListNode{
struct treeListNode *prev,*next;
ParseTreeNode* data;
};
////////////////////////////////////// LinkedList of Symbol ///////////////////////////////////////
typedef struct treelinklist{
treeListNode *head,*tail;
}TreeLinkedList;
struct parsetree_node
{
Symbol data;
struct parsetree_node* parent;
int numChild;
TOKEN_INFO* token;
TreeLinkedList* child;
int ruleno;
};
typedef struct synch{
int *arr;
char name[MAX_LEN];
intLinkedList *occur;
}Synch;
char **hashTerminal,**hashNonTerminal;
int lenTerminal,lenNonTerminal;
int NonNullableRules;
trieNode *terminalTrie;
trieNode *nonterminalTrie;
FirstSetNode *Firstset;
FollowSetNode *FollowSet;
Synch *synch;
#endif //COMPILER_PARSERDEF_H