• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 %option stack
2 
3 %x comment
4 %x api_entry
5 %x api_entry2
6 %x api_entry_param
7 %x var_type
8 
9 DIGIT    [0-9]
10 ID       [a-zA-Z_][a-zA-Z0-9_]*
11 
12     #include "spec.h"
13 
14    int num_lines = 0;
15 
16    VarType *currType = 0;
17 
18    ApiEntry apis[128];
19    int apiCount = 0;
20 
21    int typeNextState;
22 
23    extern "C" int yylex();
24 
25 %%
26 
27 "/*"         BEGIN(comment);
28 <comment>[^*\n]*        /* eat anything that's not a '*' */
29 <comment>"*"+[^*/\n]*   /* eat up '*'s not followed by '/'s */
30 <comment>\n             ++num_lines;
31 <comment>"*"+"/"        BEGIN(INITIAL);
32 
33 <*>" "   //printf("found ' '\n");
34 <*>"\n"  ++num_lines; //printf("found lf \n");
35 
36 {ID} {
37     memset(&apis[apiCount], 0, sizeof(ApiEntry));
38     memcpy(apis[apiCount].name, yytext, yyleng);
39     BEGIN(api_entry);
40     }
41 
42 <api_entry>"{" {
43     BEGIN(api_entry2);
44     }
45 
46 <api_entry2>"sync" {
47     apis[apiCount].sync = 1;
48     }
49 
50 <api_entry2>"handcodeApi" {
51     apis[apiCount].handcodeApi = 1;
52     }
53 
54 <api_entry2>"handcodePlay" {
55     apis[apiCount].handcodePlay = 1;
56     }
57 
58 <api_entry2>"ret" {
59     currType = &apis[apiCount].ret;
60     typeNextState = api_entry2;
61     BEGIN(var_type);
62     }
63 
64 <api_entry2>"param" {
65     currType = &apis[apiCount].params[apis[apiCount].paramCount];
66     apis[apiCount].paramCount++;
67     typeNextState = api_entry_param;
68     BEGIN(var_type);
69     }
70 
71 <var_type>"const" {
72     currType->isConst = 1;
73     }
74 
75 <var_type>"i8" {
76     currType->type = 1;
77     currType->bits = 8;
78     BEGIN(typeNextState);
79     }
80 
81 <var_type>"i16" {
82     currType->type = 1;
83     currType->bits = 16;
84     BEGIN(typeNextState);
85     }
86 
87 <var_type>"i32" {
88     currType->type = 1;
89     currType->bits = 32;
90     BEGIN(typeNextState);
91     }
92 
93 <var_type>"i64" {
94     currType->type = 1;
95     currType->bits = 64;
96     BEGIN(typeNextState);
97     }
98 
99 <var_type>"u8" {
100     currType->type = 2;
101     currType->bits = 8;
102     BEGIN(typeNextState);
103     }
104 
105 <var_type>"u16" {
106     currType->type = 2;
107     currType->bits = 16;
108     BEGIN(typeNextState);
109     }
110 
111 <var_type>"u32" {
112     currType->type = 2;
113     currType->bits = 32;
114     BEGIN(typeNextState);
115     }
116 
117 <var_type>"u64" {
118     currType->type = 2;
119     currType->bits = 64;
120     BEGIN(typeNextState);
121     }
122 
123 <var_type>"f" {
124     currType->type = 3;
125     currType->bits = 32;
126     BEGIN(typeNextState);
127     }
128 
129 <var_type>"d" {
130     currType->type = 3;
131     currType->bits = 64;
132     BEGIN(typeNextState);
133     }
134 
135 <var_type>{ID} {
136     currType->type = 4;
137     currType->bits = 32;
138     memcpy(currType->typeName, yytext, yyleng);
139     BEGIN(typeNextState);
140     }
141 
142 <api_entry_param>"*" {
143     currType->ptrLevel ++;
144     }
145 
146 <api_entry_param>{ID} {
147     memcpy(currType->name, yytext, yyleng);
148     BEGIN(api_entry2);
149     }
150 
151 <api_entry2>"*" {
152     currType->ptrLevel ++;
153     }
154 
155 <api_entry2>"}" {
156     apiCount++;
157     BEGIN(INITIAL);
158     }
159 
160 
161 %%
162 
163 
164 int yywrap()
165 {
166     return 1;
167 }
168 
169