-
Notifications
You must be signed in to change notification settings - Fork 0
/
scanner.l
122 lines (109 loc) · 2.74 KB
/
scanner.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
%{
#include "scanner.h"
%}
%option nounput yylineno
%%
/* comments in c! */
/* multi line */
"/*"((("*"[^/])?)|[^*])*"*/" return COMMENT;
/* single line */
"//".* return COMMENT;
/* skip preprocessor lines */
^"#".* return PREPROCESSOR;
/* reserved keywords */
auto return KEYWORD;
double return KEYWORD;
int return KEYWORD;
struct return KEYWORD;
break return KEYWORD;
else return KEYWORD;
long return KEYWORD;
switch return KEYWORD;
case return KEYWORD;
enum return KEYWORD;
register return KEYWORD;
typedef return KEYWORD;
char return KEYWORD;
extern return KEYWORD;
return return KEYWORD;
union return KEYWORD;
const return KEYWORD;
float return KEYWORD;
short return KEYWORD;
unsigned return KEYWORD;
continue return KEYWORD;
for return KEYWORD;
signed return KEYWORD;
void return KEYWORD;
default return KEYWORD;
goto return KEYWORD;
sizeof return KEYWORD;
volatile return KEYWORD;
do return KEYWORD;
if return KEYWORD;
static return KEYWORD;
while return KEYWORD;
/* constants */
/* decimal */
[-+]?[0-9]+ return CONSTANTLITERAL;
/* octal */
O[0-9]+ return CONSTANTLITERAL;
/* hexadecimal */
OX[0-9abcdef]+ return CONSTANTLITERAL;
/* real(fractional) */
[-+]?[0-9]+(\.[0-9]+)? return CONSTANTLITERAL;
/* single character */
'([^\r^\n^']|\\0)' return CONSTANTCHAR;
/* strings */
\"[^\"]*\" return CONSTANTSTRING;
/* Identifier (variable names) */
[a-zA-Z_][_a-zA-Z0-9]* return IDENTIFIER;
/* operators */
/* arithmetic */
\+ return OPERATOR;
- return OPERATOR;
\* return OPERATOR;
\/ return OPERATOR;
\% return OPERATOR;
\+\+ return OPERATOR;
"--" return OPERATOR;
/* relational */
== return OPERATOR;
!= return OPERATOR;
\> return OPERATOR;
\< return OPERATOR;
\>= return OPERATOR;
\<= return OPERATOR;
/* logical */
&& return OPERATOR;
\|\| return OPERATOR;
! return OPERATOR;
/* bitwise */
& return OPERATOR;
\| return OPERATOR;
\^ return OPERATOR;
~ return OPERATOR;
\<\< return OPERATOR;
\>\> return OPERATOR;
/* misc */
"?" return OPERATOR;
/* punctuators */
\( return PUNCTUATOR;
\) return PUNCTUATOR;
\{ return PUNCTUATOR;
\} return PUNCTUATOR;
\[ return PUNCTUATOR;
\] return PUNCTUATOR;
, return PUNCTUATOR;
: return PUNCTUATOR;
; return PUNCTUATOR;
= return PUNCTUATOR;
/* skip new lines and blank spaces */
[ \t\n] return BLANK;
/* everything not defined before is caught here, considered an error */
. return ERROR;
%%
int yywrap(void)
{
return 1;
}