-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproject.l
More file actions
113 lines (94 loc) · 3.15 KB
/
project.l
File metadata and controls
113 lines (94 loc) · 3.15 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
%{
#include <stdlib.h>
#include "project.h"
#include "y.tab.h"
#include <string.h>
#include <time.h>
void yyerror(char *);
%}
%%
[+][=] {
return ATOMICPLUS;
}
[-][=] {
return ATOMICMINUS;
}
[*][=] {
return ATOMICMULT;
}
[/][=] {
return ATOMICDIV;
}
0 {
yylval.iValue = atoi(yytext);
return INTEGER;
}
[1-9][0-9]* {
yylval.iValue = atoi(yytext);
return INTEGER;
}
[0-9]+"."[0-9]+ {
yylval.fValue=atof(yytext);
return FLOAT;
}
[-()<>=+*/;{}.,] {
return *yytext;
}
"print" return PRINT;
"int" return INTDATATYPE;
"string" return STRINGDATATYPE;
"float" return FLOATDATATYPE;
"char" return CHARDATATYPE;
[ \t\n]+ ; /* ignore whitespace */
[a-zA-Z][a-zA-Z0-9_]* {
// we put it here, to be able to match our keywords without any conflict
int i;
for(i=0;i<globalIndex;i++) // search for it in the symbol table
{
if(!strcmp(name[i],yytext)) // found it in the symbol table
{
yylval.sIndex = i;
// START
if(!currentVariableFlag)
{
strcpy(currentVariable,name[i]);
currentVariableFlag=1;
}
// END
return VARIABLE;
}
}
name[globalIndex]=malloc(sizeof(char*));
sym[globalIndex]=malloc(sizeof(conNodeType*));
sym[globalIndex]->initialized = 0;
strcpy(name[globalIndex],yytext);
sym[globalIndex]->type=NONE; //to initialise the type
yylval.sIndex = globalIndex;
if(!currentVariableFlag)
{
strcpy(currentVariable,name[globalIndex]);
currentVariableFlag=1;
}
globalIndex++;
return VARIABLE;
}
\"[^"\n]*["\n] {
// we put it here, to be able to match our keywords without any conflict
char *tempC = yytext+1;
tempC[strlen(tempC)-1] = 0;
yylval.sValue = tempC;
return STRING;
}
\'[^'\n]['\n] {
// we put it here, to be able to match our keywords without any conflict
char *tempC = yytext+1;
tempC[strlen(tempC)-1] = 0;
yylval.iValue = *(int *)tempC;
return CHAR;
}
[/][/][^\n]*\n ;
. yyerror("Unknown character");
%%
int yywrap(void) {
return 1;
}