Annotation of Gnu-Mach/mig/lexxer.l, revision 1.1.1.1

1.1       root        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:  * Mach Operating System
                     17:  * Copyright (c) 1991,1990 Carnegie Mellon University
                     18:  * All Rights Reserved.
                     19:  * 
                     20:  * Permission to use, copy, modify and distribute this software and its
                     21:  * documentation is hereby granted, provided that both the copyright
                     22:  * notice and this permission notice appear in all copies of the
                     23:  * software, derivative works or modified versions, and any portions
                     24:  * thereof, and that both notices appear in supporting documentation.
                     25:  * 
                     26:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     27:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     28:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     29:  * 
                     30:  * Carnegie Mellon requests users of this software to return to
                     31:  * 
                     32:  *  Software Distribution Coordinator  or  [email protected]
                     33:  *  School of Computer Science
                     34:  *  Carnegie Mellon University
                     35:  *  Pittsburgh PA 15213-3890
                     36:  * 
                     37:  * any improvements or extensions that they make and grant Carnegie Mellon
                     38:  * the rights to redistribute these changes.
                     39:  */
                     40: 
                     41: #include <string.h>
                     42: 
                     43: #include "mig_string.h"
                     44: #include "type.h"
                     45: #include "statement.h"
                     46: #include "global.h"
                     47: #include "parser.h"
                     48: #include "lexxer.h"
                     49: #include "cpu.h"
                     50: 
                     51: #define        stringize(x)    #x
                     52: 
                     53: #ifdef LDEBUG
                     54: #define RETURN(sym)                                                    \
                     55: {                                                                      \
                     56:     printf("yylex: returning '%s' (%d)\n", #sym, (sym));               \
                     57:     return (sym);                                                      \
                     58: }
                     59: #else  LDEBUG
                     60: #define RETURN(sym)    return (sym)
                     61: #endif LDEBUG
                     62: 
                     63: #define        TPRETURN(intype, outtype, tsize)                                \
                     64: {                                                                      \
                     65:     yylval.symtype.innumber = (intype);                                        \
                     66:     yylval.symtype.instr = stringize(intype);                          \
                     67:     yylval.symtype.outnumber = (outtype);                              \
                     68:     yylval.symtype.outstr = stringize(outtype);                                \
                     69:     yylval.symtype.size = (tsize);                                     \
                     70:     RETURN(sySymbolicType);                                            \
                     71: }
                     72: 
                     73: #define        TRETURN(type, tsize)    TPRETURN(type,type,tsize)
                     74: 
                     75: #define        FRETURN(val)                                                    \
                     76: {                                                                      \
                     77:     yylval.flag = (val);                                               \
                     78:     RETURN(syIPCFlag);                                                 \
                     79: }
                     80: 
                     81: extern YYSTYPE yylval;         /* added by rm */
                     82: 
                     83: int lineno;
                     84: char *inname;
                     85: 
                     86: #ifdef YY_START
                     87: static int oldYYBegin;
                     88: #define SAVE_BEGIN oldYYBegin = YY_START
                     89: #define RSTR_BEGIN BEGIN oldYYBegin
                     90: #else
                     91: static struct yysvf *oldYYBegin;
                     92: #define SAVE_BEGIN oldYYBegin = yybgin
                     93: #define RSTR_BEGIN yybgin = oldYYBegin;
                     94: #endif
                     95: 
                     96: static void doSharp(const char *body); /* process body of # directives */
                     97: %}
                     98: 
                     99: %Start Normal String FileName QString SkipToEOL
                    100: 
                    101: %%
                    102: 
                    103: <Normal>[Rr][Oo][Uu][Tt][Ii][Nn][Ee]           RETURN(syRoutine);
                    104: <Normal>[Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn]       RETURN(syFunction);
                    105: <Normal>[Pp][Rr][Oo][Cc][Ee][Dd][Uu][Rr][Ee]   RETURN(syProcedure);
                    106: <Normal>[Ss][Ii][Mm][Pp][Ll][Ee][Pp][Rr][Oo][Cc][Ee][Dd][Uu][Rr][Ee] RETURN(sySimpleProcedure);
                    107: <Normal>[Ss][Ii][Mm][Pp][Ll][Ee][Rr][Oo][Uu][Tt][Ii][Nn][Ee] RETURN(sySimpleRoutine);
                    108: <Normal>[Ss][Uu][Bb][Ss][Yy][Ss][Tt][Ee][Mm]   RETURN(sySubsystem);
                    109: <Normal>[Mm][Ss][Gg][Oo][Pp][Tt][Ii][Oo][Nn]   RETURN(syMsgOption);
                    110: <Normal>[Mm][Ss][Gg][Ss][Ee][Qq][Nn][Oo]       RETURN(syMsgSeqno);
                    111: <Normal>[Ww][Aa][Ii][Tt][Tt][Ii][Mm][Ee]       RETURN(syWaitTime);
                    112: <Normal>[Nn][Oo][Ww][Aa][Ii][Tt][Tt][Ii][Mm][Ee]       RETURN(syNoWaitTime);
                    113: <Normal>[Ii][Nn]                               RETURN(syIn);
                    114: <Normal>[Oo][Uu][Tt]                           RETURN(syOut);
                    115: <Normal>[Ii][Nn][Oo][Uu][Tt]                   RETURN(syInOut);
                    116: <Normal>[Rr][Ee][Qq][Uu][Ee][Ss][Tt][Pp][Oo][Rr][Tt]   RETURN(syRequestPort);
                    117: <Normal>[Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]           RETURN(syReplyPort);
                    118: <Normal>[Uu][Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]       RETURN(syUReplyPort);
                    119: <Normal>[Ss][Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]       RETURN(sySReplyPort);
                    120: <Normal>[Aa][Rr][Rr][Aa][Yy]                   RETURN(syArray);
                    121: <Normal>[Oo][Ff]                               RETURN(syOf);
                    122: <Normal>[Ee][Rr][Rr][Oo][Rr]                   RETURN(syErrorProc);
                    123: <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Pp][Rr][Ee][Ff][Ii][Xx] RETURN(syServerPrefix);
                    124: <Normal>[Uu][Ss][Ee][Rr][Pp][Rr][Ee][Ff][Ii][Xx]       RETURN(syUserPrefix);
                    125: <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Dd][Ee][Mm][Uu][Xx]   RETURN(syServerDemux);
                    126: <Normal>[Rr][Cc][Ss][Ii][Dd]                   RETURN(syRCSId);
                    127: <Normal>[Ii][Mm][Pp][Oo][Rr][Tt]               RETURN(syImport);
                    128: <Normal>[Uu][Ii][Mm][Pp][Oo][Rr][Tt]           RETURN(syUImport);
                    129: <Normal>[Ss][Ii][Mm][Pp][Oo][Rr][Tt]           RETURN(sySImport);
                    130: <Normal>[Tt][Yy][Pp][Ee]                       RETURN(syType);
                    131: <Normal>[Kk][Ee][Rr][Nn][Ee][Ll][Ss][Ee][Rr][Vv][Ee][Rr] RETURN(syKernelServer);
                    132: <Normal>[Kk][Ee][Rr][Nn][Ee][Ll][Uu][Ss][Ee][Rr]       RETURN(syKernelUser);
                    133: <Normal>[Ss][Kk][Ii][Pp]                       RETURN(sySkip);
                    134: <Normal>[Ss][Tt][Rr][Uu][Cc][Tt]               RETURN(syStruct);
                    135: <Normal>[Ii][Nn][Tt][Rr][Aa][Nn]               RETURN(syInTran);
                    136: <Normal>[Oo][Uu][Tt][Tt][Rr][Aa][Nn]           RETURN(syOutTran);
                    137: <Normal>[Dd][Ee][Ss][Tt][Rr][Uu][Cc][Tt][Oo][Rr]       RETURN(syDestructor);
                    138: <Normal>[Cc][Tt][Yy][Pp][Ee]                           RETURN(syCType);
                    139: <Normal>[Cc][Uu][Ss][Ee][Rr][Tt][Yy][Pp][Ee]           RETURN(syCUserType);
                    140: <Normal>[Cc][Ss][Ee][Rr][Vv][Ee][Rr][Tt][Yy][Pp][Ee]   RETURN(syCServerType);
                    141: <Normal>[Cc]_[Ss][Tt][Rr][Ii][Nn][Gg]                  RETURN(syCString);
                    142: 
                    143: <Normal>[Ii][Ss][Ll][Oo][Nn][Gg]               FRETURN(flLong);
                    144: <Normal>[Ii][Ss][Nn][Oo][Tt][Ll][Oo][Nn][Gg]   FRETURN(flNotLong);
                    145: <Normal>[Dd][Ee][Aa][Ll][Ll][Oo][Cc]           FRETURN(flDealloc);
                    146: <Normal>[Nn][Oo][Tt][Dd][Ee][Aa][Ll][Ll][Oo][Cc] FRETURN(flNotDealloc);
                    147: <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Cc][Oo][Pp][Yy] FRETURN(flServerCopy);
                    148: <Normal>[Cc][Oo][Uu][Nn][Tt][Ii][Nn][Oo][Uu][Tt] FRETURN(flCountInOut);
                    149: 
                    150: <Normal>[Pp][Oo][Ll][Yy][Mm][Oo][Rr][Pp][Hh][Ii][Cc]   TRETURN(MACH_MSG_TYPE_POLYMORPHIC,word_size_in_bits);
                    151: 
                    152: <Normal>"MACH_MSG_TYPE_UNSTRUCTURED"   TRETURN(MACH_MSG_TYPE_UNSTRUCTURED,0);
                    153: <Normal>"MACH_MSG_TYPE_BIT"            TRETURN(MACH_MSG_TYPE_BIT,1);
                    154: <Normal>"MACH_MSG_TYPE_BOOLEAN"                TRETURN(MACH_MSG_TYPE_BOOLEAN,32);
                    155: <Normal>"MACH_MSG_TYPE_INTEGER_16"     TRETURN(MACH_MSG_TYPE_INTEGER_16,16);
                    156: <Normal>"MACH_MSG_TYPE_INTEGER_32"     TRETURN(MACH_MSG_TYPE_INTEGER_32,32);
                    157: <Normal>"MACH_MSG_TYPE_INTEGER_64"     TRETURN(MACH_MSG_TYPE_INTEGER_64,64);
                    158: <Normal>"MACH_MSG_TYPE_CHAR"           TRETURN(MACH_MSG_TYPE_CHAR,8);
                    159: <Normal>"MACH_MSG_TYPE_BYTE"           TRETURN(MACH_MSG_TYPE_BYTE,8);
                    160: <Normal>"MACH_MSG_TYPE_INTEGER_8"      TRETURN(MACH_MSG_TYPE_INTEGER_8,8);
                    161: <Normal>"MACH_MSG_TYPE_REAL"           TRETURN(MACH_MSG_TYPE_REAL,0);
                    162: <Normal>"MACH_MSG_TYPE_STRING"         TRETURN(MACH_MSG_TYPE_STRING,0);
                    163: <Normal>"MACH_MSG_TYPE_STRING_C"       TRETURN(MACH_MSG_TYPE_STRING_C,0);
                    164: 
                    165: <Normal>"MACH_MSG_TYPE_MOVE_RECEIVE"   TPRETURN(MACH_MSG_TYPE_MOVE_RECEIVE,MACH_MSG_TYPE_PORT_RECEIVE,word_size_in_bits);
                    166: <Normal>"MACH_MSG_TYPE_COPY_SEND"      TPRETURN(MACH_MSG_TYPE_COPY_SEND,MACH_MSG_TYPE_PORT_SEND,word_size_in_bits);
                    167: <Normal>"MACH_MSG_TYPE_MAKE_SEND"      TPRETURN(MACH_MSG_TYPE_MAKE_SEND,MACH_MSG_TYPE_PORT_SEND,word_size_in_bits);
                    168: <Normal>"MACH_MSG_TYPE_MOVE_SEND"      TPRETURN(MACH_MSG_TYPE_MOVE_SEND,MACH_MSG_TYPE_PORT_SEND,word_size_in_bits);
                    169: <Normal>"MACH_MSG_TYPE_MAKE_SEND_ONCE" TPRETURN(MACH_MSG_TYPE_MAKE_SEND_ONCE,MACH_MSG_TYPE_PORT_SEND_ONCE,word_size_in_bits);
                    170: <Normal>"MACH_MSG_TYPE_MOVE_SEND_ONCE" TPRETURN(MACH_MSG_TYPE_MOVE_SEND_ONCE,MACH_MSG_TYPE_PORT_SEND_ONCE,word_size_in_bits);
                    171: 
                    172: <Normal>"MACH_MSG_TYPE_PORT_NAME"      TRETURN(MACH_MSG_TYPE_PORT_NAME,word_size_in_bits);
                    173: <Normal>"MACH_MSG_TYPE_PORT_RECEIVE"   TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_RECEIVE,word_size_in_bits);
                    174: <Normal>"MACH_MSG_TYPE_PORT_SEND"      TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_SEND,word_size_in_bits);
                    175: <Normal>"MACH_MSG_TYPE_PORT_SEND_ONCE" TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_SEND_ONCE,word_size_in_bits);
                    176: <Normal>"MACH_MSG_TYPE_POLYMORPHIC"    TRETURN(MACH_MSG_TYPE_POLYMORPHIC,0);
                    177: 
                    178: <Normal>":"            RETURN(syColon);
                    179: <Normal>";"            RETURN(sySemi);
                    180: <Normal>","            RETURN(syComma);
                    181: <Normal>"+"            RETURN(syPlus);
                    182: <Normal>"-"            RETURN(syMinus);
                    183: <Normal>"*"            RETURN(syStar);
                    184: <Normal>"/"            RETURN(syDiv);
                    185: <Normal>"("            RETURN(syLParen);
                    186: <Normal>")"            RETURN(syRParen);
                    187: <Normal>"="            RETURN(syEqual);
                    188: <Normal>"^"            RETURN(syCaret);
                    189: <Normal>"~"            RETURN(syTilde);
                    190: <Normal>"<"            RETURN(syLAngle);
                    191: <Normal>">"            RETURN(syRAngle);
                    192: <Normal>"["            RETURN(syLBrack);
                    193: <Normal>"]"            RETURN(syRBrack);
                    194: <Normal>"|"            RETURN(syBar);
                    195: 
                    196: <Normal>{Ident}                { yylval.identifier = strmake(yytext);
                    197:                          RETURN(syIdentifier); }
                    198: <Normal>{Number}       { yylval.number = atoi(yytext); RETURN(syNumber); }
                    199: 
                    200: <String>{String}       { yylval.string = strmake(yytext);
                    201:                          BEGIN Normal; RETURN(syString); }
                    202: <FileName>{FileName}   { yylval.string = strmake(yytext);
                    203:                          BEGIN Normal; RETURN(syFileName); }
                    204: <QString>{QString}     { yylval.string = strmake(yytext);
                    205:                          BEGIN Normal; RETURN(syQString); }
                    206: 
                    207: ^\#[ \t]*{Number}[ \t]*\"[^"]*\"       { doSharp(yytext+1);
                    208:                                          SAVE_BEGIN;
                    209:                                          BEGIN SkipToEOL; }
                    210: ^\#\ *{Number}                         { doSharp(yytext+1);
                    211:                                          SAVE_BEGIN;
                    212:                                          BEGIN SkipToEOL; }
                    213: ^\#                                    { yyerror("illegal # directive");
                    214:                                          SAVE_BEGIN;
                    215:                                          BEGIN SkipToEOL; }
                    216: 
                    217: <SkipToEOL>\n          RSTR_BEGIN;
                    218: <SkipToEOL>.           ;
                    219: 
                    220: [ \t]                  ;
                    221: \n                     { lineno++; }
                    222: .                      { BEGIN Normal; RETURN(syError); }
                    223: 
                    224: %%
                    225: 
                    226: extern void
                    227: LookNormal(void)
                    228: {
                    229:     if (inname == 0)
                    230:     {
                    231:        inname = strmake("(unknown)");
                    232:        lineno = 0;
                    233:     }
                    234: 
                    235:     BEGIN Normal;
                    236: }
                    237: 
                    238: extern void
                    239: LookString(void)
                    240: {
                    241:     BEGIN String;
                    242: }
                    243: 
                    244: extern void
                    245: LookQString(void)
                    246: {
                    247:     BEGIN QString;
                    248: }
                    249: 
                    250: extern void
                    251: LookFileName(void)
                    252: {
                    253:     BEGIN FileName;
                    254: }
                    255: 
                    256: static void
                    257: doSharp(const char *body)
                    258: {
                    259:     register const char *startName;
                    260: 
                    261:     lineno = atoi(body);
                    262:     startName = strchr(body, '"');
                    263:     if (startName != NULL)
                    264:     {
                    265:        *strrchr(body, '"') = '\0';
                    266:        strfree(inname);
                    267:        inname = strmake(startName+1);
                    268:     }
                    269: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.