-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlex.l
More file actions
117 lines (91 loc) · 5 KB
/
Copy pathlex.l
File metadata and controls
117 lines (91 loc) · 5 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
%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "y.tab.h"
void extern yyerror(char*);
void InvalidToken();
%}
%option noyywrap
%option yylineno
%x multi_comment
%x oneline_comment
%%
"'" {return SINGLE_QUOTES;}
"“" {return LEFT_APOSTR;}
"”" {return RIGHT_APOSTR;}
"," {return COMMA;}
":" {return COLON;}
":=" {return FOR_ASSIGN;}
";" {return SEMI_COLON;}
"=" {return EQUALS;}
"(" {return BRACKET_OPEN;}
")" {return BRACKET_CLOSE;}
"{" {return CURLY_BRACE_OPEN;}
"}" {return CURLY_BRACE_CLOSE;}
"[" {return BIG_BRACKET_OPEN;}
"]" {return BIG_BRACKET_CLOSE;}
"AND" {return ANDOP;}
"OR" {return OROP;}
">" {return GRTOP;}
"<" {return LESSOP;}
"==" {return EQCHK;}
"!=" {return NONEQCHK;}
"+" {return ADDOP;}
"-" {return SUBOP;}
"*" {return MULOP;}
"/" {return DIVOP;}
"^" {return POWOP;}
"PROGRAM" {return PROGRAM;}
"STARTMAIN" {return STARTMAIN;}
"ENDMAIN" {return ENDMAIN;}
"FUNCTION" {return FUNCTION;}
"RETURN" {return RETURN;}
"END_FUNCTION" {return END_FUNCTION;}
"VARS" {return VARS;}
"CHAR" {return CHAR;}
"INTEGER" {return INTEGER;}
"WHILE" {return WHILE;}
"ENDWHILE" {return ENDWHILE;}
"FOR" {return FOR;}
"TO" {return TO;}
"STEP" {return STEP;}
"ENDFOR" {return ENDFOR;}
"IF" {return IF;}
"THEN" {return THEN;}
"ELSEIF" {return ELSEIF;}
"ELSE" {return ELSE;}
"ENDIF" {return ENDIF;}
"SWITCH" {return SWITCH;}
"CASE" {return CASE;}
"DEFAULT" {return DEFAULT;}
"ENDSWITCH" {return ENDSWITCH;}
"PRINT" {return PRINT;}
"BREAK" {return BREAK;}
"STRUCT" {return STRUCT;}
"imag_type" {return imag_type;}
"TYPEDEF" {return TYPEDEF;}
"ENDSTRUCT" {return ENDSTRUCT;}
"/*" {BEGIN(multi_comment); }
<multi_comment>[^*]* { }
<multi_comment>"*"+[^*/]* { }
<multi_comment>"*/"+[ \t\r\n]* { BEGIN(INITIAL); }
"%".*+[ \t\r\n]* { }
[a-zA-Z_] {yylval.charVal = yytext[1]; return CHARACTER_VALUE;}
[0-9]+ {yylval.intVal = atoi(yytext); return INTEGER_VALUE;}
[a-zA-Z][_a-zA-Z0-9]*(\[[0-9]+\])+ {yylval.strVal = strdup(yytext); return ARRAY_IDENTIFIER;}
[a-zA-Z_][_a-zA-Z0-9]* {yylval.dataType = strdup(yytext); return IDENTIFIER;}
\"(\\.|[^"])*\" {yylval.strVal = strdup(yytext); return STRING_VALUE;}
[ \t\r\n] ;
[\r\n]+ {return '\n';}
<<EOF>> { yyterminate(); return 0; }
. {InvalidToken(); return *yytext;}
%%
void yyerror(char *s) {
fprintf(stderr, "\nERROR ON LINE %d : \n %s\n", yylineno, s);
exit(0);
}
void InvalidToken(){
printf("ERROR ON LINE %d : \n Invalid Token %s\n", yylineno,yytext);
exit(0);
}