Annotation of 43BSDReno/contrib/isode-beta/pepsy/lex.l.gnrc, revision 1.1.1.1

1.1       root        1: /* lex.l - lex ASN.1 analyzer */
                      2: /* %WARNING% */
                      3: 
                      4: %{
                      5: #ifndef        lint
                      6: static char *RCSid = "$Header: /f/osi/pepsy/RCS/lex.l.gnrc,v 7.0 90/07/01 19:54:35 mrose Exp $";
                      7: #endif
                      8: 
                      9: /* 
                     10:  * $Header: /f/osi/pepsy/RCS/lex.l.gnrc,v 7.0 90/07/01 19:54:35 mrose Exp $
                     11:  *
                     12:  *
                     13:  * $Log:       lex.l.gnrc,v $
                     14:  * Revision 7.0  90/07/01  19:54:35  mrose
                     15:  * *** empty log message ***
                     16:  * 
                     17:  * Revision 7.1  90/05/21  17:08:26  mrose
                     18:  * yyporting
                     19:  * 
                     20:  * Revision 7.0  89/11/23  22:11:40  mrose
                     21:  * Release 6.0
                     22:  * 
                     23:  */
                     24: 
                     25: /*
                     26:  *                               NOTICE
                     27:  *
                     28:  *    Acquisition, use, and distribution of this module and related
                     29:  *    materials are subject to the restrictions of a license agreement.
                     30:  *    Consult the Preface in the User's Manual for the full terms of
                     31:  *    this agreement.
                     32:  *
                     33:  *
                     34:  */
                     35: 
                     36: 
                     37: struct table {
                     38:     char   *t_keyword;
                     39:     int            t_value;
                     40:     int            t_porting;
                     41: };
                     42: 
                     43: static struct table reserved[] = {
                     44:     "ABSENT", ABSENT, 0,
                     45:     "ANY", ANY, 0,
                     46:     "APPLICATION", APPLICATION, 0,
                     47:     "BEGIN", BGIN, 0,
                     48:     "BIT", BIT, 0,
                     49:     "BITSTRING", BITSTRING, 0,
                     50:     "BOOLEAN", BOOLEAN, 0,
                     51:     "BY", BY, 0,
                     52:     "CHOICE", CHOICE, 0,
                     53:     "COMPONENT", COMPONENT, 0,
                     54:     "COMPONENTS", COMPONENTS, 0,
                     55:     "COMPONENTSOF", COMPONENTSOF, 0,
                     56:     "DECODER", DECODER, 0,
                     57:     "DEFAULT", DEFAULT, 0,
                     58:     "DEFINED", DEFINED, 0,
                     59:     "DEFINITIONS", DEFINITIONS, 0,
                     60:     "ENCODER", ENCODER, 0,
                     61:     "ENCRYPTED", ENCRYPTED, 0,
                     62:     "END", END, 0,
                     63:     "ENUMERATED", ENUMERATED, 0,
                     64:     "EXPLICIT", EXPLICIT, 0,
                     65:     "EXPORTS", EXPORTS, 0,
                     66:     "FALSE", FALSE, 0,
                     67:     "FROM", FROM, 0,
                     68:     "IDENTIFIER", IDENTIFIER, 0,
                     69:     "IMPLICIT", IMPLICIT, 0,
                     70:     "IMPORTS", IMPORTS, 0,
                     71:     "INCLUDE", INCLUDES, 0,
                     72:     "INTEGER", INTEGER, 0,
                     73:     "MIN", MIN, 0,
                     74:     "MAX", MAX, 0,
                     75:     "NULL", NIL, 0,
                     76:     "OBJECT", OBJECT, 0,
                     77:     "OCTET", OCTET, 0,
                     78:     "OCTETSTRING", OCTETSTRING, 0,
                     79:     "OF", OF, 0,
                     80:     "OPTIONAL", OPTIONAL, 0,
                     81:     "PREFIXES", PREFIXES, 0,
                     82:     "PRESENT", PRESENT, 0,
                     83:     "PRINTER", PRINTER, 0,
                     84:     "PRIVATE", PRIVATE, 0,
                     85:     "REAL", REAL, 0,
                     86:     "SECTIONS", SECTIONS, 0,
                     87:     "SEQUENCE", SEQUENCE, 0,
                     88:     "SEQUENCEOF", SEQUENCEOF, 0,
                     89:     "SET", SET, 0,
                     90:     "SETOF", SETOF, 0,
                     91:     "SIZE", SIZE, 0,
                     92:     "STRING", STRING, 0,
                     93:     "TAGS", TAGS, 0,
                     94:     "TRUE", TRUE, 0,
                     95:     "UNIVERSAL", UNIVERSAL, 0,
                     96:     "WITH", WITH, 0,
                     97:     "PLUS-INFINITY", PLUSINFINITY, 0,
                     98:     "MINUS-INFINITY", MINUSINFINITY, 0,
                     99: %BEGIN(ROSY)%
                    100:     "OPERATION", OPERATION, 1,
                    101:     "ARGUMENT", ARGUMENT, 0,
                    102:     "RESULT", RESULT, 0,
                    103:     "ERRORS", ERRORS, 0,
                    104:     "LINKED", LINKED, 0,
                    105:     "ERROR", ERROR, 1,
                    106:     "PARAMETER", PARAMETER, 0,
                    107: /* start new stuff */
                    108:     "ABSTRACT-OPERATION", OPERATION, 0,
                    109:     "ABSTRACT-ERROR", ERROR, 0,
                    110:     "ABSTRACT", ABSTRACT, 0,
                    111:     "OPERATIONS", OPERATIONS, 0,
                    112:     "CONSUMER", CONSUMER, 0,
                    113:     "SUPPLIER", SUPPLIER, 0,
                    114:     "INVOKES", INVOKES, 0,
                    115:     "PORT", PORT, 0,
                    116:     "PORTS", PORTS, 0,
                    117: /* refine is beyond me! (JPO)
                    118:     "REFINE", REFINE, 0,
                    119:     "AS", AS, 0,
                    120:     "RECURRING", RECURRING, 0,
                    121:     "VISIBLE", VISIBLE, 0,
                    122:     "PAIRED", PAIRED, 0,
                    123: */
                    124: /* end new stuff */
                    125: %END(ROSY)%
                    126: %BEGIN(MOSY)%
                    127:     "OBJECT-TYPE", OBJECTYPE, 1,
                    128:     "SYNTAX", SYNTAX, 0,
                    129:     "ACCESS", ACCESS, 0,
                    130:     "STATUS", STATUS, 0,
                    131: %END(MOSY)%
                    132:     NULL, 0
                    133: };
                    134: %}
                    135: 
                    136: %%
                    137: 
                    138: "--"                   {   register int c, d;
                    139: 
                    140:                            for (d = 0; c = input (); d = c == '-')
                    141:                                if (c == '\n' || (d && c == '-'))
                    142:                                    break;
                    143:                        }
                    144: [ \t]*                 {
                    145:                            if (yydebug)
                    146:                                fprintf (stderr, "WT\n");
                    147:                        }
                    148: \n                     {
                    149:                            if (yydebug)
                    150:                                fprintf (stderr, "NL\n");
                    151:                        }
                    152: "::="                  {
                    153:                            if (yydebug)
                    154:                                fprintf (stderr, "SY: CCE\n");
                    155:                            return CCE;
                    156:                        }
                    157: "..."                  {
                    158:                            if (yydebug)
                    159:                                fprintf (stderr, "SY: DOTDOTDOT\n");
                    160:                            return DOTDOTDOT;
                    161:                        }
                    162: ".."                   {
                    163:                            if (yydebug)
                    164:                                fprintf (stderr, "SY: DOTDOT\n");
                    165:                            return DOTDOT;
                    166:                        }
                    167: "."                    {
                    168:                            if (yydebug)
                    169:                                fprintf (stderr, "SY: DOT\n");
                    170:                            return DOT;
                    171:                        }
                    172: ";"                    {
                    173:                            if (yydebug)
                    174:                                fprintf (stderr, "SY: SEMICOLON");
                    175:                            return SEMICOLON;
                    176:                        }
                    177: ","                    {
                    178:                            if (yydebug)
                    179:                                fprintf (stderr, "SY: COMMA\n");
                    180:                            return COMMA;
                    181:                        }
                    182: "{"                    {
                    183:                            if (yydebug)
                    184:                                fprintf (stderr, "SY: LBRACE\n");
                    185:                            return LBRACE;
                    186:                        }
                    187: "}"                    {
                    188:                            if (yydebug)
                    189:                                fprintf (stderr, "SY: RBRACE\n");
                    190:                            return RBRACE;
                    191:                        }
                    192: "|"                    {
                    193:                            if (yydebug)
                    194:                                fprintf (stderr, "SY: BAR\n");
                    195:                            return BAR;
                    196:                        }
                    197: %BEGIN(ROSY)%
                    198: "[S]"                  {
                    199:                            if (yydebug)
                    200:                                fprintf (stderr, "SY: OBJECTSUPPLIER\n");
                    201:                            return OBJECTSUPPLIER;
                    202:                        }
                    203: "[C]"                  {
                    204:                            if (yydebug)
                    205:                                fprintf (stderr, "SY: OBJECTCONSUMER\n");
                    206:                            return OBJECTCONSUMER;
                    207:                        }
                    208: %END(ROSY)%
                    209: "[["|"$"|"<<"          {   register int tok, c, d, len;
                    210:                            register char *cp, *ep, *pp;
                    211: 
                    212:                            if (*yytext == '$')
                    213:                                tok = VLENGTH;
                    214:                            else
                    215:                                if (*yytext == '<')
                    216:                                    tok = CONTROL;
                    217:                                else {
                    218:                                    while((c = input()) == ' ' || c =='\t')
                    219:                                        continue;
                    220:                                    switch (c) {
                    221:                                        case 'a': tok = VALA;
                    222:                                                  break;
                    223:                                        case 'b': tok = VALB;
                    224:                                                  break;
                    225:                                        case 'i': tok = VALI;
                    226:                                                  break;
                    227:                                        case 's': tok = VALS;
                    228:                                                  break;
                    229:                                        case 'o': tok = VALO;
                    230:                                                  break;
                    231:                                        case 'x': tok = VALX;
                    232:                                                  break;
                    233:                                        case 'p': tok = VALP;
                    234:                                                  break;
                    235:                                        case 'q': tok = VALQ;
                    236:                                                  break;
                    237:                                        case 'r': tok = VALR;
                    238:                                                  break;
                    239:                                        case 'O': tok = VALOID;
                    240:                                                  break;
                    241:                                        case 'P': tok = PARAMETERTYPE;
                    242:                                                  break;
                    243:                                        default : myyerror ("unknown token: \"%s\"", yytext);
                    244:                                                  break;
                    245:                                    }
                    246:                                    if ((c = input()) != ' ' && c != '\t'
                    247:                                        && c != '\n')
                    248:                                        yyerror ("syntax error in [[ ... ]]");
                    249:                                }
                    250:  
                    251:                            if ((pp = malloc ((unsigned) (len = BUFSIZ)))
                    252:                                    == NULL)
                    253:                                yyerror ("out of memory");
                    254: 
                    255:                            for (ep = (cp = pp) + len - 1, d = NULL;; d = c) {
                    256:                                if ((c = input ()) == NULL)
                    257:                                    yyerror ("end-of-file while reading value");
                    258:                                if ((d == ']' && c == ']' && tok !=CONTROL) ||
                    259:                                    (c == '$' && (tok ==VALX || tok ==VALO)) ||
                    260:                                    (d == '>' && c == '>' && tok ==CONTROL)) {
                    261:                                    if ((tok == VALX || tok == VALO) &&
                    262:                                       (c != '$'))
                    263:                                       yyerror("Missing '$' in [[ - ]]");
                    264:                                    if (c == '$') {unput(c); *cp = NULL;}
                    265:                                    else *--cp = NULL;
                    266:                                    yylval.yy_string = pp;
                    267:                                    if (yydebug)
                    268:                                        fprintf (stderr, "VAL: \"%s\"\n",
                    269:                                                yylval.yy_string);
                    270:                                    return tok;
                    271:                                }
                    272:                                if (cp >= ep) {
                    273:                                    register int curlen = cp - pp;
                    274:                                    register char *dp;
                    275: 
                    276:                                    if ((dp = realloc (pp,
                    277:                                                (unsigned) (len += BUFSIZ)))
                    278:                                            == NULL)
                    279:                                        yyerror ("out of memory");
                    280:                                    cp = dp + curlen;
                    281:                                    ep = (pp = dp) + len - 1;
                    282:                                }
                    283:                                *cp++ = c;
                    284:                            }
                    285:                        }
                    286: "["                    {
                    287:                            if (yydebug)
                    288:                                fprintf (stderr, "SY: LBRACKET\n");
                    289:                            return LBRACKET;
                    290:                        }
                    291: "]"                    {
                    292:                            if (yydebug)
                    293:                                fprintf (stderr, "SY: RBRACKET\n");
                    294:                            return RBRACKET;
                    295:                        }
                    296: "<"                    {
                    297:                            if (yydebug)
                    298:                                fprintf (stderr, "SY: LANGLE\n");
                    299:                            return LANGLE;
                    300:                        }
                    301: "("                    {
                    302:                            if (yydebug)
                    303:                                fprintf (stderr, "SY: LPAREN\n");
                    304:                            return LPAREN;
                    305:                        }
                    306: ")"                    {
                    307:                            if (yydebug)
                    308:                                fprintf (stderr, "SY: RPAREN\n");
                    309:                            return RPAREN;
                    310:                        }
                    311: [0-9]+                 {
                    312:                            (void) sscanf (yytext, "%d", &yylval.yy_number);
                    313:                            if (yydebug)
                    314:                                fprintf (stderr, "LIT: 0x%x\n", yylval.yy_number);
                    315:                            return LITNUMBER;
                    316:                        }
                    317: -[0-9]+                        {
                    318:                            (void) sscanf (yytext, "%d", &yylval.yy_number);
                    319:                            if (yydebug)
                    320:                                fprintf (stderr, "LIT: 0x%x\n", yylval.yy_number);
                    321:                            return LITNUMBER;
                    322:                        }
                    323: '[^'$]*'[BbHh]         {   register char *cp; register int i;
                    324: 
                    325:                            switch (*(cp = yytext + strlen (yytext) - 1)) {
                    326:                                case 'H':
                    327:                                case 'h':
                    328:                                    *cp = NULL;
                    329:                                    (void) sscanf (yytext + 1, "%x",
                    330:                                                &yylval.yy_number);
                    331:                                    break;
                    332: 
                    333:                                case 'B':
                    334:                                case 'b':
                    335:                                    *cp-- = NULL, *cp = NULL;
                    336:                                    for (i = 0, cp = yytext + 1; *cp; ) {
                    337:                                        i <<= 1;
                    338:                                        i += *cp++ - '0';
                    339:                                    }
                    340:                                    yylval.yy_number = i;
                    341:                                    break; 
                    342:                            }
                    343:                            if (yydebug)
                    344:                                fprintf (stderr, "LIT: 0x%x\n", yylval.yy_number);
                    345:                            return LITNUMBER;
                    346:                        }
                    347: \"[^\"$]*\"            {
                    348:                            yytext[strlen (yytext) - 1] = NULL;
                    349:                            yylval.yy_string = new_string (yytext + 1);
                    350:                            if (yydebug)
                    351:                                fprintf (stderr, "LIT: \"%s\"\n", yylval.yy_string);
                    352:                            return LITSTRING;
                    353:                        }
                    354: [A-Z][A-Za-z0-9-]*     {   register struct table *t;
                    355: 
                    356:                            for (t = reserved; t -> t_keyword; t++)
                    357:                                if (strcmp (t -> t_keyword, yytext) == 0) {
                    358:                                    if (yyporting && t -> t_porting)
                    359:                                        break;
                    360:                                    if (yydebug)
                    361:                                        fprintf (stderr,
                    362:                                                  "KE: \"%s\"\n", yytext);
                    363:                                    return t -> t_value;
                    364:                                }
                    365:                            yylval.yy_string = new_string (yytext);
                    366:                            if (yydebug)
                    367:                                fprintf (stderr, "ID: \"%s\"\n", yylval.yy_string);
                    368:                            return ID;
                    369:                        }
                    370: [a-z][A-Za-z0-9-]*     {   yylval.yy_string = new_string (yytext);
                    371:                            if (yydebug)
                    372:                                fprintf (stderr, "NAME: \"%s\"\n", yylval.yy_string);
                    373:                            return NAME;
                    374:                        }
                    375: "%["                   {   register int c, d, len;
                    376:                            register char *cp, *ep, *pp;
                    377: 
                    378:                            if ((pp = malloc ((unsigned) (len = BUFSIZ)))
                    379:                                    == NULL)
                    380:                                yyerror ("out of memory");
                    381: 
                    382:                            for (ep = (cp = pp) + len - 1, d = NULL;; d = c) {
                    383:                                if ((c = input ()) == NULL)
                    384:                                    yyerror ("end-of-file while reading value");
                    385:                                if (d == '%' && c == ']' ) {
                    386:                                    *--cp = NULL;
                    387:                                    yylval.yy_string = pp;
                    388:                                    if (yydebug)
                    389:                                        fprintf (stderr, "VAL: \"%s\"\n",
                    390:                                                 yylval.yy_string);
                    391:                                    return SCTRL;
                    392:                                }
                    393:                                if (d == '\n')
                    394:                                    yyerror ("newline in %[ %] construct");
                    395:                                if (cp >= ep) {
                    396:                                    register int curlen = cp - pp;
                    397:                                    register char *dp;
                    398: 
                    399:                                    if ((dp = realloc (pp,
                    400:                                                (unsigned) (len += BUFSIZ)))
                    401:                                            == NULL)
                    402:                                        yyerror ("out of memory");
                    403:                                    cp = dp + curlen;
                    404:                                    ep = (pp = dp) + len - 1;
                    405:                                }
                    406:                                *cp++ = c;
                    407:                            }
                    408:                        }
                    409: "%{"                   {   register int c, d, len;
                    410:                            int     mylineno;
                    411:                            register char *cp, *ep, *pp;
                    412: 
                    413:                            mylineno = yylineno;
                    414:                            if ((pp = malloc ((unsigned) (len = BUFSIZ)))
                    415:                                    == NULL)
                    416:                                yyerror ("out of memory");
                    417: 
                    418:                            for (ep = (cp = pp) + len - 1, d = NULL;; d = c) {
                    419:                                if ((c = input ()) == NULL)
                    420:                                    yyerror ("end-of-file while reading action");
                    421:                                if (d == '%' && c == '}') {
                    422:                                    *--cp = NULL;
                    423:                                    yylval.yy_action = new_action (pp, mylineno);;
                    424:                                    if (yydebug)
                    425:                                        fprintf (stderr, "ACTION: \"%s\", %d\n",
                    426:                                                yylval.yy_action -> ya_text,
                    427:                                                yylval.yy_action -> ya_lineno);
                    428:                                    return ACTION;
                    429:                                }
                    430:                                if (cp >= ep) {
                    431:                                    register int curlen = cp - pp;
                    432:                                    register char *dp;
                    433: 
                    434:                                    if ((dp = realloc (pp,
                    435:                                                (unsigned) (len += BUFSIZ)))
                    436:                                            == NULL)
                    437:                                        yyerror ("out of memory");
                    438:                                    cp = dp + curlen;
                    439:                                    ep = (pp = dp) + len - 1;
                    440:                                }
                    441:                                *cp++ = c;
                    442:                            }
                    443:                        }
                    444: .                      {   
                    445:                            myyerror ("unknown token: \"%s\"", yytext);
                    446:                        }
                    447: 
                    448: %%

unix.superglobalmegacorp.com

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