-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlex.l
124 lines (92 loc) · 2.51 KB
/
lex.l
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
%option yylineno
%{
#include<stdio.h>
#include<string.h>
// #include"y.tab.h"
#include<math.h>
%}
%%
/* multiline comments in C like /* int var1; \n printf("f"); *\/ */
"/\*"(.|\n)*"\*/" {strcpy(yylval.var_name, yytext); return MLCOMMENT;}
/* Single line comments in C e.g: '//', '// ', '// lorem impsu2' */
"//"(.)* {strcpy(yylval.var_name, yytext); return ILCOMMENT;}
/*
## Arithmetic operators ##
*/
"+" {return PLUS;}
"-" {return MINUS;}
"*" {return MUL;}
"/" {return DIV;}
"%" {return MOD;}
/*
## Assignment operators ##
*/
"=" {return ASSIGNMENT;}
/*
## Comparison operators ##
*/
"==" {return EQ;}
"!=" {return NEQ;}
">" {return GT;}
"<" {return LT;}
">=" {return GEQ;}
"<=" {return LEQ;}
/*
## Logical operators ##
*/
"&&" {return LAND;}
"||" {return LOR;}
"!" {return LNOT;}
/*
## Symbols ##
*/
"(" {return LP;}
")" {return RP;}
"{" {return LC;}
"}" {return RC;}
"[" {return LB;}
"]" {return RB;}
"," {return COMA;}
";" {return SEMICOLON;}
":" {return COLON;}
"?" {return QM;}
/* MAIN IN C */
"int main()" {return MAIN;}
/*
## DATA TYPES
*/
"int" {yylval.data_type=0; return INT;}
"char" {yylval.data_type=1; return CHAR;}
"float" {yylval.data_type=2; return FLOAT;}
"double" {yylval.data_type=3; return DOUBLE;}
/*
## KEYWORDS ##
*/
"return" {return RETURN;}
"break" {return BREAK;}
"continue" {return CONTINUE;}
"for" {return FOR;}
"do" {return DO;}
"while" {return WHILE;}
"void" {return VOID;}
/* if {} else if {} else{} */
"if" {return IF;}
"else" {return ELSE;}
"else"[ ]+"if" {return ELSEIF;}
/*
## FUNCTIONS ##
*/
"printf" {return PRINTF;}
/* string in single quote and double quotes*/
'[^'"]*' {strcpy(yylval.var_name, yytext); return QUOTED_STRING;}
\"[^'"]*\" {strcpy(yylval.var_name, yytext); return QUOTED_STRING;}
/* for variables*/
[a-zA-Z_][a-zA-Z0-9_]{0,31} {strcpy(yylval.var_name, yytext); return VAR;}
/* numbers and float */
[0-9]+ {strcpy(yylval.var_name, yytext); return NUMBER;}
[0-9]+("."[0-9]+)? {strcpy(yylval.var_name, yytext);return NUMBER_DOT;}
[\n\t ]+ {/* ignoring newlines, tabs and spaces */}
%%
int yywrap(void) {
return 1;
}