-
Notifications
You must be signed in to change notification settings - Fork 2
/
c_lex.mylex
103 lines (80 loc) · 1.41 KB
/
c_lex.mylex
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
%{
#include <stdlib.h>
int i = 0;
%}
%%
\s|\t|\r {
strcpy(shm_token->type, "SKIP");
}
\n {
strcpy(shm_token->type, "SKIP");
i++;
}
if|else|while|do|break|switch|for|case|struct|typedef {
strcpy(shm_token->type,"KEYWORD");
}
int|float|double|long|char {
strcpy(shm_token->type, "TYPE");
}
(un)?signed {
strcpy(shm_token->type, "TYPE_MODIFIER");
}
#(include|define|undef|ifdef|ifndef|if|endif|elif|else) {
strcpy(shm_token->type,"PREPROC_DERIV");
}
[a-zA-Z_][a-z0-9A-Z_]* {
strcpy(shm_token->type, "IDENTIFIER");
}
[1-9][0-9]*|[0-9] {
strcpy(shm_token->type, "INTEGER");
}
\+|\-|\*|/|% {
strcpy(shm_token->type, "ARITHMETIC_OP");
}
==|&&|(\|\|)|!|<|>|<=|>= {
strcpy(shm_token->type, "LOGICAL_OP");
}
^|&|~|\| {
strcpy(shm_token->type, "BIT_OP");
}
\-> {
strcpy(shm_token->type, "ACCESS_OP");
}
= {
strcpy(shm_token->type, "ASSIGN_OP");
}
; {
strcpy(shm_token->type, "SEMICOLON");
}
\. {
strcpy(shm_token->type, "DOT");
}
, {
strcpy(shm_token->type, "COMMA");
}
\[ {
strcpy(shm_token->type, "LEFT_SQBRAC");
}
\] {
strcpy(shm_token->type, "RIGHT_SQBRAC");
}
\( {
strcpy(shm_token->type, "LEFT_PAREN");
}
\) {
strcpy(shm_token->type, "RIGHT_PAREN");
}
} {
strcpy(shm_token->type, "BLOCK_END");
}
{ {
strcpy(shm_token->type, "BLOCK_START");
}
%%
void myfunc() {
iter_list(print_token);
printf("line number: %d", i);
}
int main(int argc, char** argv) {
myylex(argv[1], myfunc);
}