1 %k 10000 2 %n 5000 3 %a 20000 4 %e 10000 5 %p 25000 6 7 Ident ([A-Za-z_][A-Za-z_0-9]*) 8 Number ([0-9]+) 9 String ([-/._$A-Za-z0-9]+) 10 QString (\"[^"\n]*\") 11 AString (\<[^>\n]*\>) 12 FileName ({QString}|{AString}) 13 14 %{ 15 /* 16 * Copyright 1991-1998 by Open Software Foundation, Inc. 17 * All Rights Reserved 18 * 19 * Permission to use, copy, modify, and distribute this software and 20 * its documentation for any purpose and without fee is hereby granted, 21 * provided that the above copyright notice appears in all copies and 22 * that both the copyright notice and this permission notice appear in 23 * supporting documentation. 24 * 25 * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 26 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 27 * FOR A PARTICULAR PURPOSE. 28 * 29 * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 30 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 31 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 32 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 33 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 34 */ 35 /* 36 * cmk1.1 37 */ 38 /* 39 * Mach Operating System 40 * Copyright (c) 1991,1990 Carnegie Mellon University 41 * All Rights Reserved. 42 * 43 * Permission to use, copy, modify and distribute this software and its 44 * documentation is hereby granted, provided that both the copyright 45 * notice and this permission notice appear in all copies of the 46 * software, derivative works or modified versions, and any portions 47 * thereof, and that both notices appear in supporting documentation. 48 * 49 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 50 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 51 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 52 * 53 * Carnegie Mellon requests users of this software to return to 54 * 55 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 56 * School of Computer Science 57 * Carnegie Mellon University 58 * Pittsburgh PA 15213-3890 59 * 60 * any improvements or extensions that they make and grant Carnegie Mellon 61 * the rights to redistribute these changes. 62 */ 63 /* 64 * 92/03/03 16:25:00 jeffreyh 65 * Changes from TRUNK 66 * [92/02/26 12:31:19 jeffreyh] 67 * 68 * 92/01/23 15:21:24 rpd 69 * Fixed macros for STDC. 70 * [92/01/16 rpd] 71 * 72 * 92/01/03 20:29:25 dbg 73 * Add 'CountInOut' flag. 74 * [91/11/11 dbg] 75 * 76 * 91/08/28 11:17:01 jsb 77 * Added syServerDemux. 78 * [91/08/13 rpd] 79 * 80 * Removed syMsgKind, syCamelot, syCamelotRoutine, syTrapRoutine, 81 * syTrapSimpleRoutine. Added syMsgSeqno. 82 * [91/08/11 rpd] 83 * 84 * 91/07/31 18:09:31 dbg 85 * Add 'serverCopy' keyword. 86 * [91/06/05 dbg] 87 * 88 * Add 'c_string' keyword. 89 * [91/04/03 dbg] 90 * 91 * 91/02/05 17:54:51 mrt 92 * Changed to new Mach copyright 93 * [91/02/01 17:54:35 mrt] 94 * 95 * 90/06/02 15:04:54 rpd 96 * Created for new IPC. 97 * [90/03/26 21:11:34 rpd] 98 * 99 * 07-Apr-89 Richard Draves (rpd) at Carnegie-Mellon University 100 * Extensive revamping. Added polymorphic arguments. 101 * Allow multiple variable-sized inline arguments in messages. 102 * 103 * 27-May-87 Richard Draves (rpd) at Carnegie-Mellon University 104 * Created. 105 */ 106 107 #include <sys/types.h> 108 #include <mach/message.h> 109 #include <mach/std_types.h> 110 #include "strdefs.h" 111 #include "type.h" 112 #include "error.h" 113 #include "statement.h" 114 #include "global.h" 115 #include "parser.h" 116 #include "lexxer.h" 117 #include "mig_machine.h" 118 119 #pragma clang diagnostic ignored "-Wunneeded-internal-declaration" 120 #undef yywrap 121 #define yywrap() 1 122 #define PortSize (sizeof (mach_port_t) * NBBY) 123 #ifdef __STDC__ 124 #define stringize(x) #x 125 #else /* __STDC__ */ 126 #define stringize(x) "x" 127 #endif /* __STDC__ */ 128 129 #ifdef LDEBUG 130 #define RETURN(sym) \ 131 { \ 132 printf("yylex: returning '%s' (%d)\n", stringize(sym), (sym)); \ 133 return (sym); \ 134 } 135 #else /* LDEBUG */ 136 #define RETURN(sym) return (sym) 137 #endif /* LDEBUG */ 138 139 #define TPRETURN(intype, outtype, tsize) \ 140 { \ 141 yylval.symtype.innumber = (intype); \ 142 yylval.symtype.instr = stringize(intype); \ 143 yylval.symtype.outnumber = (outtype); \ 144 yylval.symtype.outstr = stringize(outtype); \ 145 yylval.symtype.size = (tsize); \ 146 RETURN(sySymbolicType); \ 147 } 148 149 #define TRETURN(type, tsize) TPRETURN(type,type,tsize) 150 151 #define SAVE(s) do {oldYYBegin = s; BEGIN s; } while (0) 152 153 #define RESTORE BEGIN oldYYBegin 154 155 #define FRETURN(val) \ 156 { \ 157 yylval.flag = (val); \ 158 RETURN(syIPCFlag); \ 159 } 160 161 static int oldYYBegin = 0; 162 163 int lineno = 0; /* Replaces lex yylineno */ 164 165 static void doSharp(); /* process body of # directives */ 166 extern void yyerror(const char *); 167 %} 168 169 %option noyywrap 170 171 %Start Normal String FileName QString SkipToEOL 172 173 %% 174 175 <Normal>[Rr][Oo][Uu][Tt][Ii][Nn][Ee] RETURN(syRoutine); 176 <Normal>[Ss][Ii][Mm][Pp][Ll][Ee][Rr][Oo][Uu][Tt][Ii][Nn][Ee] RETURN(sySimpleRoutine); 177 <Normal>[Ss][Uu][Bb][Ss][Yy][Ss][Tt][Ee][Mm] RETURN(sySubsystem); 178 <Normal>[Mm][Ss][Gg][Oo][Pp][Tt][Ii][Oo][Nn] RETURN(syMsgOption); 179 <Normal>[Mm][Ss][Gg][Ss][Ee][Qq][Nn][Oo] RETURN(syMsgSeqno); 180 <Normal>[Ww][Aa][Ii][Tt][Tt][Ii][Mm][Ee] RETURN(syWaitTime); 181 <Normal>[Nn][Oo][Ww][Aa][Ii][Tt][Tt][Ii][Mm][Ee] RETURN(syNoWaitTime); 182 <Normal>[Ss][Ee][Nn][Dd][Tt][Ii][Mm][Ee] RETURN(sySendTime); 183 <Normal>[Nn][Oo][Ss][Ee][Nn][Dd][Tt][Ii][Mm][Ee] RETURN(syNoSendTime); 184 <Normal>[Ii][Nn] RETURN(syIn); 185 <Normal>[Oo][Uu][Tt] RETURN(syOut); 186 <Normal>[Uu][Ss][Ee][Rr][Ii][Mm][Pp][Ll] RETURN(syUserImpl); 187 <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Ii][Mm][Pp][Ll] RETURN(syServerImpl); 188 <Normal>[Ss][Ee][Cc][Tt][Oo][Kk][Ee][Nn] RETURN(sySecToken); 189 <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Ss][Ee][Cc][Tt][Oo][Kk][Ee][Nn] RETURN(syServerSecToken); 190 <Normal>[Uu][Ss][Ee][Rr][Ss][Ee][Cc][Tt][Oo][Kk][Ee][Nn] RETURN(syUserSecToken); 191 <Normal>[Aa][Uu][Dd][Ii][Tt][Tt][Oo][Kk][Ee][Nn] RETURN(syAuditToken); 192 <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Aa][Uu][Dd][Ii][Tt][Tt][Oo][Kk][Ee][Nn] RETURN(syServerAuditToken); 193 <Normal>[Uu][Ss][Ee][Rr][Aa][Uu][Dd][Ii][Tt][Tt][Oo][Kk][Ee][Nn] RETURN(syUserAuditToken); 194 <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Cc][Oo][Nn][Tt][Ee][Xx][Tt][Tt][Oo][Kk][Ee][Nn] RETURN(syServerContextToken); 195 <Normal>[Ii][Nn][Oo][Uu][Tt] RETURN(syInOut); 196 <Normal>[Rr][Ee][Qq][Uu][Ee][Ss][Tt][Pp][Oo][Rr][Tt] RETURN(syRequestPort); 197 <Normal>[Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt] RETURN(syReplyPort); 198 <Normal>[Uu][Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt] RETURN(syUReplyPort); 199 <Normal>[Ss][Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt] RETURN(sySReplyPort); 200 <Normal>[Aa][Rr][Rr][Aa][Yy] RETURN(syArray); 201 <Normal>[Oo][Ff] RETURN(syOf); 202 <Normal>[Ee][Rr][Rr][Oo][Rr] RETURN(syErrorProc); 203 <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Pp][Rr][Ee][Ff][Ii][Xx] RETURN(syServerPrefix); 204 <Normal>[Uu][Ss][Ee][Rr][Pp][Rr][Ee][Ff][Ii][Xx] RETURN(syUserPrefix); 205 <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Dd][Ee][Mm][Uu][Xx] RETURN(syServerDemux); 206 <Normal>[Rr][Cc][Ss][Ii][Dd] RETURN(syRCSId); 207 <Normal>[Ii][Mm][Pp][Oo][Rr][Tt] RETURN(syImport); 208 <Normal>[Uu][Ii][Mm][Pp][Oo][Rr][Tt] RETURN(syUImport); 209 <Normal>[Ss][Ii][Mm][Pp][Oo][Rr][Tt] RETURN(sySImport); 210 <Normal>[Dd][Ii][Mm][Pp][Oo][Rr][Tt] RETURN(syDImport); 211 <Normal>[Ii][Ii][Mm][Pp][Oo][Rr][Tt] RETURN(syIImport); 212 <Normal>[Tt][Yy][Pp][Ee] RETURN(syType); 213 <Normal>[Kk][Ee][Rr][Nn][Ee][Ll][Ss][Ee][Rr][Vv][Ee][Rr] RETURN(syKernelServer); 214 <Normal>[Kk][Ee][Rr][Nn][Ee][Ll][Uu][Ss][Ee][Rr] RETURN(syKernelUser); 215 <Normal>[Ss][Kk][Ii][Pp] RETURN(sySkip); 216 <Normal>[Ss][Tt][Rr][Uu][Cc][Tt] RETURN(syStruct); 217 <Normal>[Ii][Nn][Tt][Rr][Aa][Nn] RETURN(syInTran); 218 <Normal>[Oo][Uu][Tt][Tt][Rr][Aa][Nn] RETURN(syOutTran); 219 <Normal>[Dd][Ee][Ss][Tt][Rr][Uu][Cc][Tt][Oo][Rr] RETURN(syDestructor); 220 <Normal>[Cc][Tt][Yy][Pp][Ee] RETURN(syCType); 221 <Normal>[Cc][Uu][Ss][Ee][Rr][Tt][Yy][Pp][Ee] RETURN(syCUserType); 222 <Normal>[Cc][Ss][Ee][Rr][Vv][Ee][Rr][Tt][Yy][Pp][Ee] RETURN(syCServerType); 223 <Normal>[Cc]_[Ss][Tt][Rr][Ii][Nn][Gg] RETURN(syCString); 224 225 <Normal>[Ss][Aa][Mm][Ee][Cc][Oo][Uu][Nn][Tt] FRETURN(flSameCount); 226 <Normal>[Rr][Ee][Tt][Cc][Oo][Dd][Ee] FRETURN(flRetCode); 227 <Normal>[Pp][Hh][Yy][Ss][Ii][Cc][Aa][Ll][Cc][Oo][Pp][Yy] FRETURN(flPhysicalCopy); 228 <Normal>[Oo][Vv][Ee][Rr][Ww][Rr][Ii][Tt][Ee] FRETURN(flOverwrite); 229 <Normal>[Dd][Ee][Aa][Ll][Ll][Oo][Cc] FRETURN(flDealloc); 230 <Normal>[Nn][Oo][Tt][Dd][Ee][Aa][Ll][Ll][Oo][Cc] FRETURN(flNotDealloc); 231 <Normal>[Cc][Oo][Uu][Nn][Tt][Ii][Nn][Oo][Uu][Tt] FRETURN(flCountInOut); 232 <Normal>[Pp][Oo][Ll][Yy][Mm][Oo][Rr][Pp][Hh][Ii][Cc] TPRETURN(MACH_MSG_TYPE_POLYMORPHIC, MACH_MSG_TYPE_POLYMORPHIC, PortSize); 233 <Normal>[Aa][Uu][Tt][Oo] FRETURN(flAuto); 234 <Normal>[Cc][Oo][Nn][Ss][Tt] FRETURN(flConst); 235 <Normal>"PointerTo" RETURN(syPointerTo); 236 <Normal>"PointerToIfNot" RETURN(syPointerToIfNot); 237 <Normal>"ValueOf" RETURN(syValueOf); 238 <Normal>"UserTypeLimit" RETURN(syUserTypeLimit); 239 <Normal>"OnStackLimit" RETURN(syOnStackLimit); 240 241 242 <Normal>"MACH_MSG_TYPE_UNSTRUCTURED" TRETURN(MACH_MSG_TYPE_UNSTRUCTURED,0); 243 <Normal>"MACH_MSG_TYPE_BIT" TRETURN(MACH_MSG_TYPE_BIT,1); 244 <Normal>"MACH_MSG_TYPE_BOOLEAN" TRETURN(MACH_MSG_TYPE_BOOLEAN,32); 245 <Normal>"MACH_MSG_TYPE_INTEGER_8" TRETURN(MACH_MSG_TYPE_INTEGER_8,8); 246 <Normal>"MACH_MSG_TYPE_INTEGER_16" TRETURN(MACH_MSG_TYPE_INTEGER_16,16); 247 <Normal>"MACH_MSG_TYPE_INTEGER_32" TRETURN(MACH_MSG_TYPE_INTEGER_32,32); 248 <Normal>"MACH_MSG_TYPE_INTEGER_64" TRETURN(MACH_MSG_TYPE_INTEGER_64,64); 249 <Normal>"MACH_MSG_TYPE_REAL_32" TRETURN(MACH_MSG_TYPE_REAL_32,32); 250 <Normal>"MACH_MSG_TYPE_REAL_64" TRETURN(MACH_MSG_TYPE_REAL_64,64); 251 <Normal>"MACH_MSG_TYPE_CHAR" TRETURN(MACH_MSG_TYPE_CHAR,8); 252 <Normal>"MACH_MSG_TYPE_BYTE" TRETURN(MACH_MSG_TYPE_BYTE,8); 253 254 <Normal>"MACH_MSG_TYPE_MOVE_RECEIVE" TPRETURN(MACH_MSG_TYPE_MOVE_RECEIVE,MACH_MSG_TYPE_PORT_RECEIVE,PortSize); 255 <Normal>"MACH_MSG_TYPE_COPY_SEND" TPRETURN(MACH_MSG_TYPE_COPY_SEND,MACH_MSG_TYPE_PORT_SEND,PortSize); 256 <Normal>"MACH_MSG_TYPE_MAKE_SEND" TPRETURN(MACH_MSG_TYPE_MAKE_SEND,MACH_MSG_TYPE_PORT_SEND,PortSize); 257 <Normal>"MACH_MSG_TYPE_MOVE_SEND" TPRETURN(MACH_MSG_TYPE_MOVE_SEND,MACH_MSG_TYPE_PORT_SEND,PortSize); 258 <Normal>"MACH_MSG_TYPE_MAKE_SEND_ONCE" TPRETURN(MACH_MSG_TYPE_MAKE_SEND_ONCE,MACH_MSG_TYPE_PORT_SEND_ONCE,PortSize); 259 <Normal>"MACH_MSG_TYPE_MOVE_SEND_ONCE" TPRETURN(MACH_MSG_TYPE_MOVE_SEND_ONCE,MACH_MSG_TYPE_PORT_SEND_ONCE,PortSize); 260 261 <Normal>"MACH_MSG_TYPE_PORT_NAME" TRETURN(MACH_MSG_TYPE_PORT_NAME,PortSize); 262 <Normal>"MACH_MSG_TYPE_PORT_RECEIVE" TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_RECEIVE,PortSize); 263 <Normal>"MACH_MSG_TYPE_PORT_SEND" TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_SEND,PortSize); 264 <Normal>"MACH_MSG_TYPE_PORT_SEND_ONCE" TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_SEND_ONCE,PortSize); 265 <Normal>"MACH_MSG_TYPE_POLYMORPHIC" TPRETURN(MACH_MSG_TYPE_POLYMORPHIC, MACH_MSG_TYPE_POLYMORPHIC, PortSize); 266 267 <Normal>":" RETURN(syColon); 268 <Normal>";" RETURN(sySemi); 269 <Normal>"," RETURN(syComma); 270 <Normal>"+" RETURN(syPlus); 271 <Normal>"-" RETURN(syMinus); 272 <Normal>"*" RETURN(syStar); 273 <Normal>"/" RETURN(syDiv); 274 <Normal>"(" RETURN(syLParen); 275 <Normal>")" RETURN(syRParen); 276 <Normal>"=" RETURN(syEqual); 277 <Normal>"^" RETURN(syCaret); 278 <Normal>"~" RETURN(syTilde); 279 <Normal>"<" RETURN(syLAngle); 280 <Normal>">" RETURN(syRAngle); 281 <Normal>"[" RETURN(syLBrack); 282 <Normal>"]" RETURN(syRBrack); 283 <Normal>"|" RETURN(syBar); 284 285 <Normal>{Ident} { yylval.identifier = strmake(yytext); 286 RETURN(syIdentifier); } 287 <Normal>{Number} { yylval.number = atoi(yytext); RETURN(syNumber); } 288 289 <String>{String} { yylval.string = strmake(yytext); 290 SAVE(Normal); RETURN(syString); } 291 <FileName>{FileName} { yylval.string = strmake(yytext); 292 SAVE(Normal); RETURN(syFileName); } 293 <QString>{QString} { yylval.string = strmake(yytext); 294 SAVE(Normal); RETURN(syQString); } 295 296 ^\#[ \t]*{Number}[ \t]*\"[^"]*\" { doSharp(yytext+1); 297 BEGIN SkipToEOL; } 298 ^\#\ *{Number} { doSharp(yytext+1); 299 BEGIN SkipToEOL; } 300 ^\# { yyerror("illegal # directive"); 301 BEGIN SkipToEOL; } 302 ^\#pragma { BEGIN SkipToEOL; } 303 <SkipToEOL>\n { RESTORE; lineno++; } 304 <SkipToEOL>. ; 305 306 [ \t] ; 307 \n lineno++; 308 . { SAVE(Normal); RETURN(syError); } 309 310 %% 311 312 extern void 313 LookNormal(void) 314 { 315 SAVE(Normal); 316 } 317 318 extern void 319 LookString(void) 320 { 321 SAVE(String); 322 } 323 324 extern void 325 LookQString() 326 { 327 SAVE(QString); 328 } 329 330 extern void 331 LookFileName() 332 { 333 SAVE(FileName); 334 } 335 336 static void 337 doSharp(body) 338 char *body; 339 { 340 register char *startName, *endName; 341 342 lineno = atoi(body); 343 startName = strchr(body, '"'); 344 if (startName != NULL) 345 { 346 endName = strrchr(body, '"'); 347 *endName = '\0'; 348 strfree(__DECONST(char *,yyinname)); 349 yyinname = strmake(startName+1); 350 } 351 } 352 353