xref: /aosp_15_r20/frameworks/rs/spec.l (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
1*e1eccf28SAndroid Build Coastguard Worker %option stack
2*e1eccf28SAndroid Build Coastguard Worker 
3*e1eccf28SAndroid Build Coastguard Worker %x comment
4*e1eccf28SAndroid Build Coastguard Worker %x api_entry
5*e1eccf28SAndroid Build Coastguard Worker %x api_entry2
6*e1eccf28SAndroid Build Coastguard Worker %x api_entry_param
7*e1eccf28SAndroid Build Coastguard Worker %x var_type
8*e1eccf28SAndroid Build Coastguard Worker 
9*e1eccf28SAndroid Build Coastguard Worker DIGIT    [0-9]
10*e1eccf28SAndroid Build Coastguard Worker ID       [a-zA-Z_][a-zA-Z0-9_]*
11*e1eccf28SAndroid Build Coastguard Worker 
12*e1eccf28SAndroid Build Coastguard Worker     #include "spec.h"
13*e1eccf28SAndroid Build Coastguard Worker 
14*e1eccf28SAndroid Build Coastguard Worker    int num_lines = 0;
15*e1eccf28SAndroid Build Coastguard Worker 
16*e1eccf28SAndroid Build Coastguard Worker    VarType *currType = 0;
17*e1eccf28SAndroid Build Coastguard Worker 
18*e1eccf28SAndroid Build Coastguard Worker    ApiEntry apis[128];
19*e1eccf28SAndroid Build Coastguard Worker    int apiCount = 0;
20*e1eccf28SAndroid Build Coastguard Worker 
21*e1eccf28SAndroid Build Coastguard Worker    int typeNextState;
22*e1eccf28SAndroid Build Coastguard Worker 
checkPointerType()23*e1eccf28SAndroid Build Coastguard Worker    void checkPointerType() {
24*e1eccf28SAndroid Build Coastguard Worker        VarType *baseType = currType;
25*e1eccf28SAndroid Build Coastguard Worker        int curPtrLevel = 0;
26*e1eccf28SAndroid Build Coastguard Worker        while (curPtrLevel < baseType->ptrLevel) {
27*e1eccf28SAndroid Build Coastguard Worker            currType = &apis[apiCount].params[apis[apiCount].paramCount];
28*e1eccf28SAndroid Build Coastguard Worker            currType->type = 4;
29*e1eccf28SAndroid Build Coastguard Worker            currType->ptrLevel = curPtrLevel;
30*e1eccf28SAndroid Build Coastguard Worker            if (currType->ptrLevel > 0) {
31*e1eccf28SAndroid Build Coastguard Worker               currType->isConst = 1;
32*e1eccf28SAndroid Build Coastguard Worker            }
33*e1eccf28SAndroid Build Coastguard Worker            sprintf(currType->typeName, "%s", "size_t");
34*e1eccf28SAndroid Build Coastguard Worker            switch(baseType->ptrLevel - curPtrLevel) {
35*e1eccf28SAndroid Build Coastguard Worker            case 1:
36*e1eccf28SAndroid Build Coastguard Worker               sprintf(currType->name, "%s_length", baseType->name);
37*e1eccf28SAndroid Build Coastguard Worker               break;
38*e1eccf28SAndroid Build Coastguard Worker            case 2:
39*e1eccf28SAndroid Build Coastguard Worker               sprintf(currType->name, "%s_length_length", baseType->name);
40*e1eccf28SAndroid Build Coastguard Worker               break;
41*e1eccf28SAndroid Build Coastguard Worker            }
42*e1eccf28SAndroid Build Coastguard Worker            apis[apiCount].paramCount++;
43*e1eccf28SAndroid Build Coastguard Worker            curPtrLevel ++;
44*e1eccf28SAndroid Build Coastguard Worker        }
45*e1eccf28SAndroid Build Coastguard Worker    }
46*e1eccf28SAndroid Build Coastguard Worker 
47*e1eccf28SAndroid Build Coastguard Worker    int yylex();
48*e1eccf28SAndroid Build Coastguard Worker 
49*e1eccf28SAndroid Build Coastguard Worker %%
50*e1eccf28SAndroid Build Coastguard Worker 
51*e1eccf28SAndroid Build Coastguard Worker "/*"         BEGIN(comment);
52*e1eccf28SAndroid Build Coastguard Worker <comment>[^*\n]*        /* eat anything that's not a '*' */
53*e1eccf28SAndroid Build Coastguard Worker <comment>"*"+[^*/\n]*   /* eat up '*'s not followed by '/'s */
54*e1eccf28SAndroid Build Coastguard Worker <comment>\n             ++num_lines;
55*e1eccf28SAndroid Build Coastguard Worker <comment>"*"+"/"        BEGIN(INITIAL);
56*e1eccf28SAndroid Build Coastguard Worker 
57*e1eccf28SAndroid Build Coastguard Worker <*>" "   //printf("found ' '\n");
58*e1eccf28SAndroid Build Coastguard Worker <*>"\t"   //printf("found ' '\n");
59*e1eccf28SAndroid Build Coastguard Worker <*>"\n"  ++num_lines; //printf("found lf \n");
60*e1eccf28SAndroid Build Coastguard Worker 
61*e1eccf28SAndroid Build Coastguard Worker {ID} {
62*e1eccf28SAndroid Build Coastguard Worker     memset(&apis[apiCount], 0, sizeof(ApiEntry));
63*e1eccf28SAndroid Build Coastguard Worker     memcpy(apis[apiCount].name, yytext, yyleng);
64*e1eccf28SAndroid Build Coastguard Worker     BEGIN(api_entry);
65*e1eccf28SAndroid Build Coastguard Worker     }
66*e1eccf28SAndroid Build Coastguard Worker 
67*e1eccf28SAndroid Build Coastguard Worker <api_entry>"{" {
68*e1eccf28SAndroid Build Coastguard Worker     BEGIN(api_entry2);
69*e1eccf28SAndroid Build Coastguard Worker     }
70*e1eccf28SAndroid Build Coastguard Worker 
71*e1eccf28SAndroid Build Coastguard Worker <api_entry2>"sync" {
72*e1eccf28SAndroid Build Coastguard Worker     apis[apiCount].sync = 1;
73*e1eccf28SAndroid Build Coastguard Worker     }
74*e1eccf28SAndroid Build Coastguard Worker 
75*e1eccf28SAndroid Build Coastguard Worker <api_entry2>"handcodeApi" {
76*e1eccf28SAndroid Build Coastguard Worker     apis[apiCount].handcodeApi = 1;
77*e1eccf28SAndroid Build Coastguard Worker     }
78*e1eccf28SAndroid Build Coastguard Worker 
79*e1eccf28SAndroid Build Coastguard Worker <api_entry2>"direct" {
80*e1eccf28SAndroid Build Coastguard Worker     apis[apiCount].direct = 1;
81*e1eccf28SAndroid Build Coastguard Worker     }
82*e1eccf28SAndroid Build Coastguard Worker 
83*e1eccf28SAndroid Build Coastguard Worker <api_entry2>"nocontext" {
84*e1eccf28SAndroid Build Coastguard Worker     apis[apiCount].nocontext = 1;
85*e1eccf28SAndroid Build Coastguard Worker     }
86*e1eccf28SAndroid Build Coastguard Worker 
87*e1eccf28SAndroid Build Coastguard Worker <api_entry2>"ret" {
88*e1eccf28SAndroid Build Coastguard Worker     currType = &apis[apiCount].ret;
89*e1eccf28SAndroid Build Coastguard Worker     typeNextState = api_entry2;
90*e1eccf28SAndroid Build Coastguard Worker     BEGIN(var_type);
91*e1eccf28SAndroid Build Coastguard Worker     }
92*e1eccf28SAndroid Build Coastguard Worker 
93*e1eccf28SAndroid Build Coastguard Worker <api_entry2>"param" {
94*e1eccf28SAndroid Build Coastguard Worker     currType = &apis[apiCount].params[apis[apiCount].paramCount];
95*e1eccf28SAndroid Build Coastguard Worker     apis[apiCount].paramCount++;
96*e1eccf28SAndroid Build Coastguard Worker     typeNextState = api_entry_param;
97*e1eccf28SAndroid Build Coastguard Worker     BEGIN(var_type);
98*e1eccf28SAndroid Build Coastguard Worker     }
99*e1eccf28SAndroid Build Coastguard Worker 
100*e1eccf28SAndroid Build Coastguard Worker <var_type>"const" {
101*e1eccf28SAndroid Build Coastguard Worker     currType->isConst = 1;
102*e1eccf28SAndroid Build Coastguard Worker     }
103*e1eccf28SAndroid Build Coastguard Worker 
104*e1eccf28SAndroid Build Coastguard Worker <var_type>"i8" {
105*e1eccf28SAndroid Build Coastguard Worker     currType->type = 1;
106*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 8;
107*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
108*e1eccf28SAndroid Build Coastguard Worker     }
109*e1eccf28SAndroid Build Coastguard Worker 
110*e1eccf28SAndroid Build Coastguard Worker <var_type>"i16" {
111*e1eccf28SAndroid Build Coastguard Worker     currType->type = 1;
112*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 16;
113*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
114*e1eccf28SAndroid Build Coastguard Worker     }
115*e1eccf28SAndroid Build Coastguard Worker 
116*e1eccf28SAndroid Build Coastguard Worker <var_type>"i32" {
117*e1eccf28SAndroid Build Coastguard Worker     currType->type = 1;
118*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 32;
119*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
120*e1eccf28SAndroid Build Coastguard Worker     }
121*e1eccf28SAndroid Build Coastguard Worker 
122*e1eccf28SAndroid Build Coastguard Worker <var_type>"i64" {
123*e1eccf28SAndroid Build Coastguard Worker     currType->type = 1;
124*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 64;
125*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
126*e1eccf28SAndroid Build Coastguard Worker     }
127*e1eccf28SAndroid Build Coastguard Worker 
128*e1eccf28SAndroid Build Coastguard Worker <var_type>"u8" {
129*e1eccf28SAndroid Build Coastguard Worker     currType->type = 2;
130*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 8;
131*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
132*e1eccf28SAndroid Build Coastguard Worker     }
133*e1eccf28SAndroid Build Coastguard Worker 
134*e1eccf28SAndroid Build Coastguard Worker <var_type>"u16" {
135*e1eccf28SAndroid Build Coastguard Worker     currType->type = 2;
136*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 16;
137*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
138*e1eccf28SAndroid Build Coastguard Worker     }
139*e1eccf28SAndroid Build Coastguard Worker 
140*e1eccf28SAndroid Build Coastguard Worker <var_type>"u32" {
141*e1eccf28SAndroid Build Coastguard Worker     currType->type = 2;
142*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 32;
143*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
144*e1eccf28SAndroid Build Coastguard Worker     }
145*e1eccf28SAndroid Build Coastguard Worker 
146*e1eccf28SAndroid Build Coastguard Worker <var_type>"u64" {
147*e1eccf28SAndroid Build Coastguard Worker     currType->type = 2;
148*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 64;
149*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
150*e1eccf28SAndroid Build Coastguard Worker     }
151*e1eccf28SAndroid Build Coastguard Worker 
152*e1eccf28SAndroid Build Coastguard Worker <var_type>"f" {
153*e1eccf28SAndroid Build Coastguard Worker     currType->type = 3;
154*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 32;
155*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
156*e1eccf28SAndroid Build Coastguard Worker     }
157*e1eccf28SAndroid Build Coastguard Worker 
158*e1eccf28SAndroid Build Coastguard Worker <var_type>"d" {
159*e1eccf28SAndroid Build Coastguard Worker     currType->type = 3;
160*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 64;
161*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
162*e1eccf28SAndroid Build Coastguard Worker     }
163*e1eccf28SAndroid Build Coastguard Worker 
164*e1eccf28SAndroid Build Coastguard Worker <var_type>{ID} {
165*e1eccf28SAndroid Build Coastguard Worker     currType->type = 4;
166*e1eccf28SAndroid Build Coastguard Worker     currType->bits = 32;
167*e1eccf28SAndroid Build Coastguard Worker     memcpy(currType->typeName, yytext, yyleng);
168*e1eccf28SAndroid Build Coastguard Worker     BEGIN(typeNextState);
169*e1eccf28SAndroid Build Coastguard Worker     }
170*e1eccf28SAndroid Build Coastguard Worker 
171*e1eccf28SAndroid Build Coastguard Worker <api_entry_param>"*" {
172*e1eccf28SAndroid Build Coastguard Worker     currType->ptrLevel ++;
173*e1eccf28SAndroid Build Coastguard Worker     }
174*e1eccf28SAndroid Build Coastguard Worker 
175*e1eccf28SAndroid Build Coastguard Worker <api_entry_param>{ID} {
176*e1eccf28SAndroid Build Coastguard Worker     memcpy(currType->name, yytext, yyleng);
177*e1eccf28SAndroid Build Coastguard Worker     checkPointerType();
178*e1eccf28SAndroid Build Coastguard Worker     BEGIN(api_entry2);
179*e1eccf28SAndroid Build Coastguard Worker     }
180*e1eccf28SAndroid Build Coastguard Worker 
181*e1eccf28SAndroid Build Coastguard Worker <api_entry2>"*" {
182*e1eccf28SAndroid Build Coastguard Worker     currType->ptrLevel ++;
183*e1eccf28SAndroid Build Coastguard Worker     }
184*e1eccf28SAndroid Build Coastguard Worker 
185*e1eccf28SAndroid Build Coastguard Worker <api_entry2>"}" {
186*e1eccf28SAndroid Build Coastguard Worker     apiCount++;
187*e1eccf28SAndroid Build Coastguard Worker     BEGIN(INITIAL);
188*e1eccf28SAndroid Build Coastguard Worker     }
189*e1eccf28SAndroid Build Coastguard Worker 
190*e1eccf28SAndroid Build Coastguard Worker <*>. {
191*e1eccf28SAndroid Build Coastguard Worker     fprintf(stderr, "error: unexpected character \'%c\' at line %d\n",
192*e1eccf28SAndroid Build Coastguard Worker             *yytext, num_lines + 1);
193*e1eccf28SAndroid Build Coastguard Worker     exit(1);
194*e1eccf28SAndroid Build Coastguard Worker     }
195*e1eccf28SAndroid Build Coastguard Worker 
196*e1eccf28SAndroid Build Coastguard Worker %%
197*e1eccf28SAndroid Build Coastguard Worker 
198*e1eccf28SAndroid Build Coastguard Worker 
199*e1eccf28SAndroid Build Coastguard Worker int yywrap()
200*e1eccf28SAndroid Build Coastguard Worker {
201*e1eccf28SAndroid Build Coastguard Worker     return 1;
202*e1eccf28SAndroid Build Coastguard Worker }
203*e1eccf28SAndroid Build Coastguard Worker 
204