Annotation of 43BSDReno/contrib/isode-beta/pepsy/yacc.y.gnrc, revision 1.1.1.1

1.1       root        1: /* yacc.y - yacc ASN.1 parser */
                      2: /* %WARNING% */
                      3: 
                      4: %{
                      5: #ifndef        lint
                      6: static char *rcsid = "$Header: /f/osi/pepsy/RCS/yacc.y.gnrc,v 7.0 90/07/01 19:54:39 mrose Exp $";
                      7: #endif
                      8: 
                      9: /* 
                     10:  * $Header: /f/osi/pepsy/RCS/yacc.y.gnrc,v 7.0 90/07/01 19:54:39 mrose Exp $
                     11:  *
                     12:  *
                     13:  * $Log:       yacc.y.gnrc,v $
                     14:  * Revision 7.0  90/07/01  19:54:39  mrose
                     15:  * *** empty log message ***
                     16:  * 
                     17:  * Revision 7.1  90/05/21  17:08:28  mrose
                     18:  * yyporting
                     19:  * 
                     20:  * Revision 7.0  89/11/23  22:12:10  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: #include <stdio.h>
                     37: #include <ctype.h>
                     38: %BEGIN(PEPSY)%
                     39: #include "pepsydefs.h"
                     40: %END(PEPSY)%
                     41: %BEGIN(PEPY)%
                     42: #include "pepy.h"
                     43: %END(PEPY)%
                     44: %BEGIN(ROSY)%
                     45: #include "rosy-defs.h"
                     46: %END(ROSY)%
                     47: %BEGIN(MOSY)%
                     48: #include "mosy-defs.h"
                     49: %END(MOSY)%
                     50: 
                     51: #define        YYSTYPE YYSTKTYPE
                     52: 
                     53: 
                     54: #define        YYDEBUG 1
                     55: 
                     56: extern int pepydebug;
                     57: extern int doexternals;
                     58: 
                     59: int    tagcontrol = TAG_UNKNOWN;
                     60: static int     tagdefault;
                     61: static int     listtype;
                     62: static OID     modid;
                     63: 
                     64: static int     yyporting = 0;
                     65: 
                     66: typedef struct ypa {
                     67:     char   *ya_text;
                     68:     int            ya_lineno;
                     69: }              ypa, *YA;
                     70: #define        NULLYA  ((YA) 0)
                     71: extern double pow ();
                     72: 
                     73: static YA  new_action (text, lineno)
                     74: char   *text;
                     75: int    lineno;
                     76: {
                     77:     register YA            ya;
                     78: 
                     79:     if ((ya = (YA) calloc (1, sizeof *ya)) == NULLYA)
                     80:        yyerror ("out of memory");
                     81: 
                     82:     ya -> ya_text = text;
                     83:     ya -> ya_lineno = lineno;
                     84: 
                     85:     return ya;
                     86: }
                     87: #define        free_action(ya) (void) free ((char *) (ya))
                     88: 
                     89: typedef struct {
                     90:     char *ys_structname;
                     91:     char *ys_ptrname;
                     92: } ysa, *YS;
                     93: #define NULLYS ((YS) 0)
                     94: 
                     95: static YS new_ys (str)
                     96: char   *str;
                     97: {
                     98:     register YS        ys;
                     99:     register char *p, *q;
                    100:     char c;
                    101: 
                    102:     if((ys = (YS) malloc (sizeof *ys)) == NULLYS)
                    103:        yyerror ("out of memory");
                    104:     q = str;
                    105:     while (isspace (*q)) q++;
                    106:     for (p = q; isalnum(*p) || *p == '_'; p++)
                    107:        continue;
                    108:     if (*p != '\0') {
                    109:        c = *p;
                    110:        *p = '\0';
                    111:        ys -> ys_structname = new_string (q);
                    112:        *p = c;
                    113:     }
                    114:     else {
                    115:        ys -> ys_structname = new_string (q);
                    116:        ys -> ys_ptrname = NULLCP;
                    117:        free (str);
                    118:        return ys;
                    119:     }
                    120:     for (q = p; *q != '$'; q++)
                    121:        if (! *q) {
                    122:            free (str);
                    123:            ys -> ys_ptrname = NULLCP;
                    124:            return ys;
                    125:        }
                    126:     q++;
                    127:     while (isspace (*q)) q++;
                    128:     for (p = q; isalnum(*p) || *p == '_'; p++)
                    129:        continue;
                    130:     *p = '\0';
                    131:     ys -> ys_ptrname = new_string (q);
                    132:     free (str);
                    133:     return ys;
                    134: }
                    135: #define        free_ys(ys) (void) free ((char *) (ys))
                    136: 
                    137: static int  final_actions = 0;
                    138: %}
                    139: 
                    140: %start ModuleDefinition
                    141: 
                    142: 
                    143: %union {
                    144:     int            yy_number;
                    145:     char   *yy_string;
                    146:     YP     yy_type;
                    147:     YV     yy_value;
                    148:     YT     yy_tag;
                    149:     YA     yy_action;
                    150:     OID            yy_oid;
                    151:     YS     yy_sctrl;
                    152:     double  yy_real;
                    153: }
                    154: 
                    155: 
                    156: %token ABSENT ACTION ANY APPLICATION BAR BGIN BIT BITSTRING BOOLEAN
                    157:        BY CCE CHOICE COMMA COMPONENT COMPONENTS COMPONENTSOF CONTROL
                    158:        DECODER DEFAULT DEFINED DEFINITIONS DOT DOTDOT DOTDOTDOT
                    159:        ENCODER ENCRYPTED END ENUMERATED EXPORTS EXPLICIT FALSE FROM
                    160:        ID IDENTIFIER IMPLICIT IMPORTS INCLUDES INTEGER LANGLE LBRACE
                    161:        LBRACKET LITNUMBER LITSTRING LPAREN MIN MAX NAME NIL OBJECT
                    162:        OCTET OCTETSTRING OF OPTIONAL PARAMETERTYPE PREFIXES PRESENT
                    163:        PRINTER PRIVATE RBRACE RBRACKET REAL RPAREN SECTIONS SEMICOLON
                    164:        SEQUENCE SEQUENCEOF SET SETOF SIZE STRING TAGS TRUE UNIVERSAL
                    165:        VALA VALB VALI VALS VALP VALO VALOID VALR VALQ VALX VLENGTH
                    166:        WITH SCTRL PLUSINFINITY MINUSINFINITY
                    167: %BEGIN(ROSY)%
                    168:         OPERATION ARGUMENT RESULT ERRORS LINKED ERROR PARAMETER
                    169: /* new stuff */
                    170:        ABSTRACT OPERATIONS CONSUMER SUPPLIER INVOKES PORT PORTS
                    171:        OBJECTCONSUMER OBJECTSUPPLIER REFINE AS RECURRING VISIBLE
                    172:        PAIRED BIND UNBIND
                    173: /* end new stuff */
                    174: %END(ROSY)%
                    175: %BEGIN(MOSY)%
                    176:        OBJECTYPE SYNTAX ACCESS STATUS
                    177: %END(MOSY)%
                    178: 
                    179: %type  <yy_number>     LITNUMBER
                    180: %type  <yy_real>       RealValue NumericRealValue SpecialRealValue
                    181: %type  <yy_string>     ID NAME LITSTRING VALA VALB VALI VALS VALP VALQ
                    182:                        VALR VALO VALX VLENGTH VALOID CONTROL PARAMETERTYPE
                    183:                        ParameterType Control ValParameter String
                    184:                        PassInt PassBool PassOid PassAny PassReal
                    185:                        ModuleIdentifier Symbol SymbolList
                    186:                        SCTRL
                    187: %type  <yy_type>       Type BuiltinType DefinedType PassValue PassBit
                    188:                        PassString NullPass ElementTypes OptionalTypeList
                    189:                        OptionalType NamedType ComponentsOf AlternativeTypeList
                    190:                        MemberTypes SubType
                    191: %BEGIN(ROSY)%
                    192:                        Argument Result Parameter
                    193: %END(ROSY)%
                    194: %type  <yy_value>      NamedNumberList NamedNumber NumericValue
                    195:                        Value BuiltinValue DefinedValue IdentifierList
                    196:                        Values NamedValueList NamedValue NNlist
                    197: %BEGIN(ROSY)%
                    198:                        Errors ErrorNames
                    199:                         LinkedOperations LinkedOperationNames
                    200: %END(ROSY)%
                    201: %BEGIN(MOSY)%
                    202:                        ObjectID ObjectIDComponentList ObjectSubID
                    203: %END(MOSY)%
                    204: %type  <yy_tag>        Tag Class
                    205: %type  <yy_action>     ACTION Action
                    206: %type   <yy_oid>       ObjIdComponentList ObjectIdentifierValue
                    207:                        ObjIdComponent NumberForm NameAndNumberForm
                    208: %type  <yy_sctrl>      Sctrl
                    209: %%
                    210: 
                    211: ModuleDefinition:      ModuleIdentifier DEFINITIONS TagDefault CCE
                    212:                                {
                    213:                                    mymodule = $1;
                    214:                                    mymoduleid = modid;
                    215:                                    pass1 ();
                    216:                                }
                    217:                        ModuleActions ModulePrefixes
                    218:                        BGIN ModuleBody END { pass2 (); final_actions++; }
                    219:                        ModuleActions
                    220:        ;
                    221: 
                    222: TagDefault:            EXPLICIT TAGS { 
                    223:                            tagdefault = 0;
                    224:                            tagcontrol = TAG_EXPLICIT;
                    225:                        }
                    226:        |               IMPLICIT TAGS {
                    227:                            tagdefault = YP_IMPLICIT;
                    228:                            tagcontrol = TAG_IMPLICIT;
                    229:                        }
                    230:        |               empty {
                    231:                            tagdefault = 0;
                    232:                            tagcontrol = TAG_UNKNOWN;
                    233:                        }
                    234:        ;
                    235: 
                    236: ModuleIdentifier:      ID AssignedIdentifier { $$ = $1; }
                    237:        ;
                    238: 
                    239: AssignedIdentifier:    ObjectIdentifierValue { modid = $1; }
                    240:        |               empty
                    241:        ;
                    242: 
                    243: ModuleActions:         ACTION {
                    244: %BEGIN(PEPSY)%
                    245:                            if (bflag) {
                    246:                                if (final_actions) 
                    247:                                    init_new_file ();
                    248:                                else {
                    249:                                    module_actions = $1 -> ya_text;
                    250:                                    free_action ($1);
                    251:                                    break;
                    252:                                }
                    253:                            }
                    254: %END(PEPSY)%
                    255: %BEGIN(PEPY)%
                    256:                            if (bflag) {
                    257:                                if (final_actions) 
                    258:                                    init_new_file ();
                    259:                                else {
                    260:                                    module_actions = $1 -> ya_text;
                    261:                                    free_action ($1);
                    262:                                    break;
                    263:                                }
                    264:                            }
                    265: %END(PEPY)%
                    266:                            if (!dflag) {
                    267:                                if (Cflag > 0) {
                    268:                                    if (!Pflag && *sysin)
                    269:                                        printf ("# line %d \"%s\"\n",
                    270:                                                $1 -> ya_lineno, sysin);
                    271:                                    fputs ($1 -> ya_text, stdout);
                    272:                                }
                    273:                                else {
                    274:                                    printf ("%%{\n#include \"%s-types.h\"\n",
                    275:                                            mymodule);
                    276:                                    printf ("%s%%}\n", $1 -> ya_text);
                    277:                                    Cflag = -1;
                    278:                                }
                    279:                            }
                    280:                            free_action ($1);
                    281: %BEGIN(PEPSY)%
                    282:                            if (bflag)
                    283:                                end_file ();
                    284: %END(PEPSY)%
                    285: %BEGIN(PEPY)%
                    286:                            if (bflag)
                    287:                                end_file ();
                    288: %END(PEPY)%
                    289:                        }
                    290:        |               empty
                    291:        ;
                    292: ModulePrefixes:
                    293:                        PREFIXES String String String
                    294:                        {
                    295:                            yyencdflt = $2;
                    296:                            yydecdflt = $3;
                    297:                            yyprfdflt = $4;
                    298:                        }
                    299:        |               empty
                    300:        ;
                    301: ModuleBody:            Exports Imports AssignmentList
                    302:        ;
                    303: 
                    304: Exports:               EXPORTS  { listtype = TBL_EXPORT; doexternals = 0;
                    305:                                   yyporting = 1; }
                    306:                                 SymbolsExported SEMICOLON {
                    307:                            yyporting = 0;
                    308:                            if (mymoduleid == NULLOID)
                    309:                                warning ("EXPORTS but no ModuleIdentifier");
                    310:                                
                    311:                        }
                    312:        |               empty
                    313:        ;
                    314: 
                    315: SymbolsExported:       SymbolList
                    316:        |               empty
                    317:        ;
                    318: 
                    319: Imports:               IMPORTS  { listtype = TBL_IMPORT; yyporting = 1; }
                    320:                                 SymbolsImported SEMICOLON {
                    321:                            yyporting = 0;
                    322:                            if (mymoduleid == NULLOID)
                    323:                                warning ("IMPORTS but no ModuleIdentifier");
                    324:                        }
                    325: 
                    326:        |               empty
                    327:        ;
                    328: 
                    329: SymbolsImported:       SymbolsFromModuleList
                    330:        |               empty
                    331:        ;
                    332: 
                    333: SymbolsFromModuleList: SymbolsFromModuleList SymbolsFromModule
                    334:        |               SymbolsFromModule
                    335:        ;
                    336: 
                    337: SymbolsFromModule:     SymbolList FROM ModuleIdentifier
                    338:                                {
                    339:                                    addtableref ($3, modid, listtype);
                    340:                                }
                    341:        ;
                    342: 
                    343: SymbolList:            SymbolList COMMA Symbol { addtable($3, listtype); }
                    344:        |               Symbol { addtable ($1, listtype); }
                    345:        ;
                    346: 
                    347: Symbol:                        ID
                    348:        |               NAME
                    349:        ;
                    350: 
                    351: AssignmentList:                AssignmentList Section Assignment
                    352:        |               empty
                    353:        ;
                    354: 
                    355: Section:               ENCODER String
                    356:                        { yysection = YP_ENCODER; yyencpref = $2;
                    357:                          yyprint (NULLCP, 0, 1); }
                    358:        |               DECODER String
                    359:                        { yysection = YP_DECODER; yydecpref = $2;
                    360:                          yyprint (NULLCP, 0, 1); }
                    361:        |               PRINTER String
                    362:                        { yysection = YP_PRINTER; yyprfpref = $2;
                    363:                          yyprint (NULLCP, 0, 1); }
                    364:        |               SECTIONS String String String
                    365:                        {
                    366:                            yysection = NULL;
                    367:                            if (strcmp (yyencpref = $2, "none"))
                    368:                                yysection |= YP_ENCODER;
                    369:                            if (strcmp (yydecpref = $3, "none"))
                    370:                                yysection |= YP_DECODER;
                    371:                            if (strcmp (yyprfpref = $4, "none"))
                    372:                                yysection |= YP_PRINTER;
                    373:                            yyprint (NULLCP, 0, 1); 
                    374:                        }
                    375:        |               empty
                    376:        ;
                    377: 
                    378: String:                        ID { $$ = $1; }
                    379:        |               NAME { $$ = $1; }
                    380:        ;
                    381: 
                    382: Assignment:            Typeassignment
                    383: %BEGIN(ROSY)%
                    384:        |               OperationDefinition
                    385:        |               ErrorDefinition
                    386: /* new stuff */
                    387:        |               PortDefinition
                    388:        |               ObjectDefinition
                    389: /*     |               RefineDefinition        -- impossible!!!! (JPO) */
                    390: /*     |               BindDefinition          -- lacking defs... */
                    391: /*     |               UnBindDefinition        -- ditto */
                    392: /* end new stuff */
                    393: %END(ROSY)%
                    394: %BEGIN(MOSY)%
                    395:        |               ObjectTypeDefinition
                    396:        |               ObjectIDefinition
                    397: %END(MOSY)%
                    398:        |               Valueassignment
                    399:        ;
                    400: 
                    401: %BEGIN(ROSY)%
                    402: OperationDefinition:   NAME OPERATION Argument Result Errors LinkedOperations
                    403:                        CCE LITNUMBER {
                    404:                            pass1_op (mymodule, $1, $3, $4, $5, $6, $8);
                    405:                        }
                    406:        ;
                    407: 
                    408: Argument:              ARGUMENT NamedType { $$ = $2; }
                    409:        |               empty { $$ = NULLYP; }
                    410:        ;
                    411: 
                    412: Result:                        RESULT NamedType { $$ = $2; }
                    413:        |               empty { $$ = NULLYP; }
                    414:        ;
                    415: 
                    416: Errors:                        ERRORS LBRACE ErrorNames RBRACE { $$ = $3; }
                    417:        |               empty { $$ = NULLYV; }
                    418: 
                    419: LinkedOperations:      LINKED LBRACE LinkedOperationNames RBRACE { $$ = $3; }
                    420:        |               empty { $$ = NULLYV; }
                    421:     
                    422: 
                    423: ErrorNames:            NamedValueList {
                    424:                            $$ = new_value (YV_VALIST);
                    425:                            $$ -> yv_idlist = $1;
                    426:                        }
                    427:        |               empty { $$ = NULLYV; }
                    428: 
                    429: 
                    430: LinkedOperationNames:  NamedValueList {
                    431:                            $$ = new_value (YV_VALIST);
                    432:                            $$ -> yv_idlist = $1;
                    433:                        }
                    434:        |               empty { $$ = NULLYV; }
                    435: 
                    436: 
                    437: ErrorDefinition:       NAME ERROR Parameter CCE LITNUMBER {
                    438:                            pass1_err (mymodule, $1, $3, $5);
                    439:                        }
                    440:        ;
                    441: 
                    442: Parameter:             PARAMETER NamedType { $$ = $2; }
                    443:        |               empty { $$ = NULLYP; }
                    444:        ;
                    445: 
                    446: /* new stuff start */
                    447: PortDefinition:                NAME PORT PortOperations CCE PortValue
                    448:        ;
                    449: 
                    450: PortValue:             ObjectIdentifierValue
                    451:        |               NAME
                    452:        ;
                    453: 
                    454: PortOperations:                PortSymmetrical
                    455:        |               PortAsymetrical
                    456:        |               empty
                    457: 
                    458: PortSymmetrical:       ABSTRACT OPERATIONS LBRACE PortOperationList RBRACE
                    459:        ;
                    460: 
                    461: PortAsymetrical:       PortOneSided
                    462:        |               PortTwoSided
                    463:        ;
                    464: 
                    465: PortOneSided:          PortConsumer
                    466:        |               PortSupplier
                    467:        ;
                    468: 
                    469: PortTwoSided:          PortConsumer PortSupplier
                    470:        |               PortSupplier PortConsumer
                    471:        ;
                    472: 
                    473: PortConsumer:          CONSUMER INVOKES LBRACE PortOperationList RBRACE
                    474:        ;
                    475: 
                    476: PortSupplier:          SUPPLIER INVOKES LBRACE PortOperationList RBRACE
                    477:        ;
                    478: 
                    479: PortOperationList:     OperationValue
                    480:        |               OperationValue COMMA PortOperationList
                    481:        ;
                    482: 
                    483: OperationValue:                NAME
                    484:        |               ID
                    485:        |               LITNUMBER
                    486:        |               ObjectIdentifierValue
                    487:        ;
                    488: 
                    489: ObjectDefinition:      NAME OBJECT ObjectType CCE PortValue
                    490:        ;
                    491: 
                    492: ObjectType:            PORTS LBRACE ObjectPortList RBRACE
                    493:        |               empty
                    494:        ;
                    495: 
                    496: ObjectPortList:                ObjectPort COMMA ObjectPortList
                    497:        |               ObjectPort
                    498:        ;
                    499: 
                    500: ObjectPort:            PortValue ObjectPortType
                    501:        ;
                    502: 
                    503: ObjectPortType:                ObjectSymetric
                    504:        |               ObjectAsymetric
                    505:        ;
                    506: 
                    507: ObjectSymetric:                empty
                    508:        ;
                    509: 
                    510: ObjectAsymetric:       OBJECTCONSUMER
                    511:        |               OBJECTSUPPLIER
                    512:        ;
                    513: 
                    514: /* New stuff end */
                    515: %END(ROSY)%
                    516: 
                    517: %BEGIN(MOSY)%
                    518: ObjectTypeDefinition:  NAME OBJECTYPE SYNTAX NamedType ACCESS NAME
                    519:                        STATUS NAME CCE ObjectID {
                    520:                            pass1_obj (mymodule, $1, $4, $10, $6, $8);
                    521:                        }
                    522:        ;
                    523: 
                    524: ObjectIDefinition:     NAME OBJECT IDENTIFIER CCE ObjectID {
                    525:                            pass1_oid (mymodule, $1, $5);
                    526:                        }
                    527:        ;
                    528: 
                    529: ObjectID:              NAME {
                    530:                            $$ = new_value (YV_OIDLIST);
                    531:                            $$ -> yv_idlist = new_value (YV_IDEFINED);
                    532:                            $$ -> yv_idlist -> yv_identifier = $1;
                    533:                            $$ -> yv_idlist -> yv_flags |= YV_BOUND;
                    534:                        }
                    535:        |               LBRACE ObjectIDComponentList RBRACE {
                    536:                            $$ = new_value (YV_OIDLIST);
                    537:                            $$ -> yv_idlist = $2;
                    538:                        }
                    539:        ;
                    540: ObjectIDComponentList: ObjectSubID { $$ = $1; }
                    541:        |               ObjectIDComponentList ObjectSubID {
                    542:                            $$ = add_value ($1, $2);
                    543:                        }
                    544:        ;
                    545: ObjectSubID:           LITNUMBER {
                    546:                            $$ = new_value (YV_NUMBER);
                    547:                            $$ -> yv_number = $1;
                    548:                        }
                    549:        |               NAME {
                    550:                            $$ = new_value (YV_IDEFINED);
                    551:                            $$ -> yv_identifier = $1;
                    552:                            $$ -> yv_flags |= YV_BOUND;
                    553:                        }
                    554:        |               NAME LPAREN LITNUMBER RPAREN {
                    555:                            $$ = new_value (YV_NUMBER);
                    556:                            $$ -> yv_number = $3;
                    557:                            $$ -> yv_named = $1;
                    558:                            $$ -> yv_flags |= YV_NAMED;
                    559:                        }
                    560:        ;
                    561: %END(MOSY)%
                    562: 
                    563: Typeassignment:                ID ParameterType Action CCE Action Type {
                    564:                            if ($2)
                    565:                                $6 -> yp_param_type = $2;
                    566:                            if ($3) {
                    567:                                $6 -> yp_action0 = $3 -> ya_text;
                    568:                                $6 -> yp_act0_lineno= $3 -> ya_lineno;
                    569:                                free_action ($3);
                    570:                            }
                    571:                            if ($5) {
                    572:                                if ($6 -> yp_action05 == NULLCP) {
                    573:                                    $6 -> yp_action05 = $5 -> ya_text;
                    574:                                    $6 -> yp_act05_lineno= $5 -> ya_lineno;
                    575:                                    free_action ($5);
                    576:                                }
                    577:                                else
                    578:                                    yyerror("too many preliminary actions associated with type");
                    579:                            }
                    580:                            pass1_type (yyencpref, yydecpref, yyprfpref,
                    581:                                    mymodule, $1, $6);
                    582:                        } ;
                    583: 
                    584: Type:                  BuiltinType Action {
                    585:                            $$ = $1;
                    586:                            $$ -> yp_direction = yysection;
                    587:                            if ($2) {
                    588:                                $$ -> yp_action2 = $2 -> ya_text;
                    589:                                $$ -> yp_act2_lineno= $2 -> ya_lineno;
                    590:                                free_action ($2);
                    591:                            }
                    592:                        }
                    593:        |               DefinedType Action {
                    594:                            $$ = $1;
                    595:                            $$ -> yp_direction = yysection;
                    596:                            if ($2) {
                    597:                                $$ -> yp_action2 = $2 -> ya_text;
                    598:                                $$ -> yp_act2_lineno= $2 -> ya_lineno;
                    599:                                free_action ($2);
                    600:                            }
                    601:                        }
                    602:        |               SubType Action {
                    603:                            $$ = $1;
                    604:                            $$ -> yp_direction = yysection;
                    605:                            if ($2) {
                    606:                                $$ -> yp_action2 = $2 -> ya_text;
                    607:                                $$ -> yp_act2_lineno = $2 -> ya_lineno;
                    608:                                free_action ($2);
                    609:                            }
                    610:                        }
                    611:        ;
                    612: 
                    613: Action:                        ACTION
                    614:        |               empty { $$ = NULLYA; }
                    615:        ;
                    616: 
                    617: Control:               CONTROL
                    618:        |               empty { $$ = NULLCP; }
                    619:        ;
                    620: 
                    621: ParameterType:         PARAMETERTYPE
                    622:        |               empty { $$ = NULLCP; }
                    623:        ;
                    624: 
                    625: BuiltinType:           BOOLEAN PassBool {
                    626:                            $$ = new_type (YP_BOOL);
                    627:                            $$ -> yp_intexp = $2;
                    628:                        }
                    629:        |               INTEGER PassInt NNlist {
                    630:                            $$ = new_type ($3 ? YP_INTLIST : YP_INT);
                    631:                            $$ -> yp_intexp = $2;
                    632:                            if ($3)
                    633:                                    $$ -> yp_value = $3;
                    634:                        }
                    635:        |               ENUMERATED PassInt LBRACE NamedNumberList RBRACE {
                    636:                            $$ = new_type (YP_ENUMLIST);
                    637:                            $$ -> yp_intexp = $2;
                    638:                            $$ -> yp_value = $4;
                    639:                        }
                    640: 
                    641:        |               Bitstring PassBit NNlist {
                    642:                            $$ = $2;
                    643:                            $$ -> yp_code = $3 ? YP_BITLIST: YP_BIT;
                    644:                            if ($3)
                    645:                                $$ -> yp_value = $3;
                    646:                        }
                    647:        |               Octetstring PassString {
                    648:                            $$ = $2;
                    649:                            $$ -> yp_code = YP_OCT;
                    650:                        }
                    651:        |               NIL { $$ = new_type (YP_NULL); }
                    652:        |               SEQUENCE Sctrl PassAny {
                    653:                            $$ = new_type (YP_SEQ);
                    654:                            $$ -> yp_strexp = $3;
                    655:                        }
                    656:        |               SequenceOf Sctrl Action Control Type {
                    657:                            $$ = new_type (YP_SEQTYPE);
                    658:                            $$ -> yp_type = $5;
                    659:                            if ($2) {
                    660:                                $$ -> yp_structname = $2 -> ys_structname;
                    661:                                $$ -> yp_ptrname = $2 -> ys_ptrname;
                    662:                                free_ys ($2);
                    663:                            }
                    664:                            if ($4) {
                    665:                                $$ -> yp_control = $4;
                    666:                                $$ -> yp_flags |= YP_CONTROLLED;
                    667:                            }
                    668:                            if ($3) {
                    669:                                $$ -> yp_action3 = $3 -> ya_text;
                    670:                                $$ -> yp_act3_lineno = $3 -> ya_lineno;
                    671:                                free_action ($3);
                    672:                            }
                    673:                        }
                    674:        |               SEQUENCE Sctrl Action LBRACE ElementTypes RBRACE {
                    675:                            $$ = new_type (YP_SEQLIST);
                    676:                            $$ -> yp_type = $5;
                    677:                            if ($2) {
                    678:                                $$ -> yp_structname = $2 -> ys_structname;
                    679:                                $$ -> yp_ptrname = $2 -> ys_ptrname;
                    680:                                free_ys ($2);
                    681:                            }
                    682:                            if ($3 && $$ -> yp_action1 == NULLCP) {
                    683:                                $$ -> yp_action1 = $3 -> ya_text;
                    684:                                 $$ -> yp_act1_lineno = $3 -> ya_lineno;
                    685:                                 free_action ($3);
                    686:                             }
                    687:                             else if ($3)
                    688:                                 yyerror("too many actions associated with SEQUENCE");
                    689:                        }
                    690:        |               SET Sctrl PassAny {
                    691:                            $$ = new_type (YP_SET);
                    692:                            $$ -> yp_strexp = $3;
                    693:                        }
                    694:        |               SetOf Sctrl Action Control Type {
                    695:                            $$ = new_type (YP_SETTYPE);
                    696:                            $$ -> yp_type = $5;
                    697:                            if ($2) {
                    698:                                $$ -> yp_structname = $2 -> ys_structname;
                    699:                                $$ -> yp_ptrname = $2 -> ys_ptrname;
                    700:                                free_ys ($2);
                    701:                            }
                    702:                            if ($4) {
                    703:                                $$ -> yp_control = $4;
                    704:                                $$ -> yp_flags |= YP_CONTROLLED;
                    705:                            }
                    706:                            if ($3) {
                    707:                                $$ -> yp_action3 = $3 -> ya_text;
                    708:                                $$ -> yp_act3_lineno = $3 -> ya_lineno;
                    709:                                free_action ($3);
                    710:                            }
                    711:                        }
                    712: 
                    713:        |               SET Sctrl Action LBRACE MemberTypes RBRACE {
                    714:                            $$ = new_type (YP_SETLIST);
                    715:                            $$ -> yp_type = $5;
                    716:                            if ($2) {
                    717:                                $$ -> yp_structname = $2 -> ys_structname;
                    718:                                $$ -> yp_ptrname = $2 -> ys_ptrname;
                    719:                                free_ys ($2);
                    720:                            }
                    721:                            if ($3 && $$ -> yp_action1 == NULLCP) {
                    722:                                 $$ -> yp_action1 = $3 -> ya_text;
                    723:                                 $$ -> yp_act1_lineno = $3 -> ya_lineno;
                    724:                                 free_action ($3);
                    725:                             }
                    726:                             else if ($3)
                    727:                                 yyerror("too many actions associated with SET");
                    728:                        }
                    729:        |               Tag Action IMPLICIT Type {
                    730:                            $$ = $4;
                    731:                            $$ -> yp_tag = $1;
                    732:                            if ($2 && $$ -> yp_action1 == NULLCP) {
                    733:                                $$ -> yp_action1 = $2 -> ya_text;
                    734:                                $$ -> yp_act1_lineno= $2 -> ya_lineno;
                    735:                                free_action ($2);
                    736:                            }
                    737:                            else if ($2)
                    738:                                yyerror("too many actions associated with tagged type");
                    739:                            $$ -> yp_flags |= YP_IMPLICIT | YP_TAG;
                    740:                        }
                    741:        |               Tag Action EXPLICIT Type {
                    742:                            $$ = $4;
                    743:                            $$ -> yp_tag = $1;
                    744:                            if ($2 && $$ -> yp_action1 == NULLCP) {
                    745:                                $$ -> yp_action1 = $2 -> ya_text;
                    746:                                $$ -> yp_act1_lineno= $2 -> ya_lineno;
                    747:                                free_action ($2);
                    748:                            }
                    749:                            else if ($2)
                    750:                                yyerror("too many actions associated with tagged type");
                    751:                            $$ -> yp_flags |= YP_TAG;
                    752:                        }
                    753:        |               Tag Action Type {
                    754:                            $$ = $3;
                    755:                            $$ -> yp_tag = $1;
                    756:                            if ($2 && $$ -> yp_action1 == NULLCP) {
                    757:                                $$ -> yp_action1 = $2 -> ya_text;
                    758:                                $$ -> yp_act1_lineno= $2 -> ya_lineno;
                    759:                                free_action ($2);
                    760:                            }
                    761:                            else if ($2)
                    762:                                yyerror("too many actions associated with tagged type");
                    763:                            $$ -> yp_flags |= (YP_TAG | tagdefault);
                    764:                        }
                    765:        |               CHOICE Sctrl Action Control LBRACE 
                    766:                                        AlternativeTypeList RBRACE {
                    767:                            $$ = new_type (YP_CHOICE);
                    768:                            $$ -> yp_type = $6;
                    769:                            if ($2) {
                    770:                                $$ -> yp_structname = $2 -> ys_structname;
                    771:                                $$ -> yp_ptrname = $2 -> ys_ptrname;
                    772:                                free_ys ($2);
                    773:                            }
                    774:                            if ($4) {
                    775:                                $$ -> yp_control = $4;
                    776:                                $$ -> yp_flags |= YP_CONTROLLED;
                    777:                            }
                    778:                            if ($$ -> yp_action1 == NULLCP && $3) {
                    779:                                $$ -> yp_action1 = $3 -> ya_text;
                    780:                                $$ -> yp_act1_lineno = $3 -> ya_lineno;
                    781:                                free_action ($3);
                    782:                            }
                    783:                            else if ($3)
                    784:                                yyerror("too many actions associated with CHOICE");
                    785:                        }
                    786:        |               NAME LANGLE Type {
                    787:                            $$ = $3;
                    788:                            $$ -> yp_bound = $1;
                    789:                            $$ -> yp_flags |= YP_BOUND;
                    790:                        }
                    791:        |               AnyType PassAny {
                    792:                            $$ = new_type (YP_ANY);
                    793:                            $$ -> yp_strexp = $2;
                    794:                        }
                    795:        |               OBJECT IDENTIFIER PassOid {
                    796:                            $$ = new_type (YP_OID);
                    797:                            $$ -> yp_strexp = $3;
                    798:                        }
                    799:        |               ENCRYPTED Type {
                    800:                            $$ = $2;
                    801:                            $$ -> yp_tag = new_tag (PE_CLASS_UNIV);
                    802:                            $$ -> yp_tag -> yt_value = new_value(YV_NUMBER);
                    803:                            $$ -> yp_tag -> yt_value -> yv_number = PE_PRIM_ENCR;
                    804:                            $$ -> yp_flags |=
                    805:                                (YP_ENCRYPTED | YP_TAG | YP_IMPLICIT);
                    806:                        }
                    807:        |               REAL PassReal {
                    808:                            $$ = new_type(YP_REAL);
                    809:                            $$ -> yp_strexp = $2;
                    810:                        }
                    811:        ;
                    812: 
                    813: NNlist:                        LBRACE NamedNumberList RBRACE { $$ = $2; }
                    814:        |               empty { $$ = NULL; }
                    815:        ;
                    816: DefinedType:           ID PassValue ValParameter {
                    817:                            $$ = $2;
                    818:                            $$ -> yp_code = YP_IDEFINED;
                    819:                            $$ -> yp_identifier = $1;
                    820:                            if ($3) {
                    821:                                $$ -> yp_parm = $3;
                    822:                                $$ -> yp_flags |= YP_PARMVAL;
                    823:                            }
                    824:                            check_impexp ($$);
                    825:                        }
                    826:        |               ID DOT ID PassValue ValParameter {
                    827:                            $$ = $4;
                    828:                            $$ -> yp_code = YP_IDEFINED;
                    829:                            $$ -> yp_identifier = $3;
                    830:                            $$ -> yp_module = $1;
                    831:                            if ($5) {
                    832:                                $$ -> yp_parm = $5;
                    833:                                $$ -> yp_flags |= YP_PARMVAL;
                    834:                            }
                    835:                        }
                    836:        ;
                    837: 
                    838: PassValue:             VALA {
                    839:                            $$ = new_type (YP_UNDF);
                    840:                            $$ -> yp_intexp = NULLCP;
                    841:                            $$ -> yp_strexp = $1;
                    842:                            $$ -> yp_prfexp = 'a';
                    843:                        }
                    844:        |               VALB {
                    845:                            $$ = new_type (YP_UNDF);
                    846:                            $$ -> yp_intexp = $1;
                    847:                            $$ -> yp_strexp = NULLCP;
                    848:                            $$ -> yp_prfexp = 'b';
                    849:                        }
                    850:        |               VALI {
                    851:                            $$ = new_type (YP_UNDF);
                    852:                            $$ -> yp_intexp = $1;
                    853:                            $$ -> yp_strexp = NULLCP;
                    854:                            $$ -> yp_prfexp = 'i';
                    855:                        }
                    856:        |               VALX VLENGTH {
                    857:                            $$ = new_type (YP_UNDF);
                    858:                            $$ -> yp_intexp = $2;
                    859:                            $$ -> yp_strexp = $1;
                    860:                            $$ -> yp_prfexp = 'x';
                    861:                        }
                    862:        |               VALOID {
                    863:                            $$ = new_type (YP_UNDF);
                    864:                            $$ -> yp_intexp = NULLCP;
                    865:                            $$ -> yp_strexp = $1;
                    866:                            $$ -> yp_prfexp = 'O';
                    867:                        }
                    868:        |               PassString
                    869:        ;
                    870: 
                    871: AnyType:               ANY
                    872:        |               ANY DEFINED BY NAME
                    873:        ;
                    874:                        
                    875: PassOid:               VALOID
                    876:        |               empty { $$ = NULLCP; }
                    877:        ;
                    878: 
                    879: PassAny:               VALA
                    880:        |               empty { $$ = NULLCP; }
                    881:        ;
                    882: 
                    883: PassBool:              VALB
                    884:        |               empty { $$ = NULLCP; }
                    885:        ;
                    886: 
                    887: PassInt:               VALI
                    888:        |               empty { $$ = NULLCP; }
                    889:        ;
                    890: 
                    891: PassBit:               VALX VLENGTH {
                    892:                            $$ = new_type (YP_UNDF);
                    893:                            $$ -> yp_intexp = $2;
                    894:                            $$ -> yp_strexp = $1;
                    895:                        }
                    896:        |               NullPass
                    897:        ;
                    898: 
                    899: PassString:            VALS {
                    900:                            $$ = new_type (YP_UNDF);
                    901:                            $$ -> yp_intexp = NULLCP;
                    902:                            $$ -> yp_strexp = $1;
                    903:                            $$ -> yp_prfexp = 's';
                    904:                        }
                    905:        |               VALO VLENGTH {
                    906:                            $$ = new_type (YP_UNDF);
                    907:                            $$ -> yp_intexp = $2;
                    908:                            $$ -> yp_strexp = $1;
                    909:                            $$ -> yp_prfexp = 'o';
                    910:                        }
                    911:        |               VALQ {
                    912:                            $$ = new_type (YP_UNDF);
                    913:                            $$ -> yp_intexp = NULLCP;
                    914:                            $$ -> yp_strexp = $1;
                    915:                            $$ -> yp_prfexp = 'q';
                    916:                        }
                    917:        |               NullPass
                    918:        ;
                    919: 
                    920: PassReal:              VALR 
                    921:        |               empty { $$ = NULLCP; }
                    922:        ;
                    923: 
                    924: NullPass:              empty {
                    925:                            $$ = new_type (YP_UNDF);
                    926:                            $$ -> yp_intexp = NULLCP;
                    927:                            $$ -> yp_strexp = NULLCP;
                    928:                        }
                    929:        ;
                    930: 
                    931: ValParameter:          VALP
                    932:        |               empty { $$ = NULLCP; }
                    933:        ;
                    934: 
                    935: NamedNumberList:       NamedNumber { $$ = $1; }
                    936:        |               NamedNumberList COMMA NamedNumber {
                    937:                            $$ = add_value ($1, $3);
                    938:                        }
                    939:        ;
                    940: NamedNumber:           NAME LPAREN NumericValue RPAREN Action {
                    941:                            $$ = $3;
                    942:                            $$ -> yv_named = $1;
                    943:                            $$ -> yv_flags |= YV_NAMED;
                    944:                            if ($5) {
                    945:                                $$ -> yv_action = $5 -> ya_text;
                    946:                                $$ -> yv_act_lineno = $5 -> ya_lineno;
                    947:                                free_action ($5);
                    948:                            }
                    949:                        }
                    950:        ;
                    951: NumericValue:          LITNUMBER {
                    952:                            $$ = new_value (YV_NUMBER);
                    953:                            $$ -> yv_number = $1;
                    954:                        }
                    955:        |               DefinedValue
                    956:        ;
                    957: 
                    958: ElementTypes:          OptionalTypeList { $$ = $1; }
                    959:        |               empty { $$ = NULLYP; }
                    960:        ;
                    961: MemberTypes:           OptionalTypeList { $$ = $1; }
                    962: 
                    963:        |               empty { $$ = NULLYP; }
                    964:        ;
                    965: OptionalTypeList:      OptionalType { $$ = $1; }
                    966:        |               OptionalTypeList COMMA OptionalType {
                    967:                            $$ = add_type ($1, $3);
                    968:                        }
                    969:        ;
                    970: OptionalType:          NamedType { $$ = $1; }
                    971:        |               NamedType OPTIONAL Control {
                    972:                            $$ = $1;
                    973:                            $$ -> yp_flags |= YP_OPTIONAL;
                    974:                            if ($3) {
                    975:                                $$ -> yp_optcontrol = $3;
                    976:                                $$ -> yp_flags |= YP_OPTCONTROL;
                    977:                            }
                    978:                        }
                    979:        |               NamedType DEFAULT Value Control {
                    980:                            $$ = $1;
                    981:                            $$ -> yp_default = $3;
                    982:                            $$ -> yp_flags |= YP_DEFAULT;
                    983:                            if ($4) {
                    984:                                $$ -> yp_optcontrol = $4;
                    985:                                $$ -> yp_flags |= YP_OPTCONTROL;
                    986:                            }
                    987:                        }
                    988:        |               ComponentsOf { $$ = $1; }
                    989:        |               NAME ComponentsOf { $$ = $2; $$->yp_id = $1; }
                    990:        ;
                    991: NamedType:             NAME Action Type {
                    992:                            $$ = $3;
                    993:                            $$ -> yp_id = $1;
                    994:                            if ($$ -> yp_action1 == NULLCP && $2) {
                    995:                                $$ -> yp_action1 = $2 -> ya_text;
                    996:                                $$ -> yp_act1_lineno = $2 -> ya_lineno;
                    997:                                free_action ($2);
                    998:                            }
                    999:                            $$ -> yp_flags |= YP_ID;
                   1000:                        }
                   1001:        |               Type { $$ = $1; }
                   1002:        ;
                   1003: ComponentsOf:          Components Type {
                   1004:                            $$ = $2;
                   1005:                            $$ -> yp_flags |= YP_COMPONENTS;
                   1006:                        }
                   1007:        ;
                   1008: AlternativeTypeList:   NamedType { $$ = $1; }
                   1009:        |               AlternativeTypeList COMMA NamedType {
                   1010:                            $$ = add_type ($1, $3);
                   1011:                        }
                   1012:        ;
                   1013: 
                   1014: Tag:                   LBRACKET Class NumericValue RBRACKET {
                   1015:                            $$ = $2;
                   1016:                            $$ -> yt_value = $3;
                   1017:                        }
                   1018:        ;
                   1019: Class:                 UNIVERSAL { $$ = new_tag (PE_CLASS_UNIV); }
                   1020:        |               APPLICATION { $$ = new_tag (PE_CLASS_APPL); }
                   1021:        |               PRIVATE { $$ = new_tag (PE_CLASS_PRIV); }
                   1022:        |               empty { $$ = new_tag (PE_CLASS_CONT); }
                   1023:        ;
                   1024: 
                   1025: 
                   1026: Valueassignment:       NAME Type CCE Value
                   1027:        ;
                   1028: 
                   1029: Value:                 BuiltinValue
                   1030:        |               DefinedValue
                   1031:        ;
                   1032: BuiltinValue:          TRUE {
                   1033:                            $$ = new_value (YV_BOOL);
                   1034:                            $$ -> yv_number = 1;
                   1035:                        }
                   1036:        |               FALSE {
                   1037:                            $$ = new_value (YV_BOOL);
                   1038:                            $$ -> yv_number = 0;
                   1039:                        }
                   1040:        |               LITNUMBER {
                   1041:                            $$ = new_value (YV_NUMBER);
                   1042:                            $$ -> yv_number = $1;
                   1043:                        }
                   1044:        |               LBRACE ID IdentifierList RBRACE {
                   1045:                            $$ = new_value (YV_IDLIST);
                   1046:                            $$ -> yv_idlist = new_value (YV_IDEFINED);
                   1047:                            $$ -> yv_idlist -> yv_identifier = $2;
                   1048:                            if ($3)
                   1049:                                $$ = add_value ($$, $3);
                   1050:                        }
                   1051:        |               LITSTRING {
                   1052:                            $$ = new_value (YV_STRING);
                   1053:                            $$ -> yv_string = $1;
                   1054:                        }
                   1055:        |               NIL { $$ = new_value (YV_NULL); }
                   1056:        |               LBRACE Values RBRACE {
                   1057:                            $$ = new_value (YV_VALIST);
                   1058:                            $$ -> yv_idlist = $2;
                   1059:                        }
                   1060:        |               NAME Value {
                   1061:                            $$ = $2;
                   1062:                            $$ -> yv_id = $1;
                   1063:                            $$ -> yv_flags |= YV_ID;
                   1064:                        }
                   1065:        |               Type Value {
                   1066:                            $$ = $2;
                   1067:                            $$ -> yv_type = $1;
                   1068:                            $$ -> yv_flags |= YV_TYPE;
                   1069:                        }
                   1070:        |               RealValue {
                   1071:                            $$ = new_value (YV_REAL);
                   1072:                            $$ -> yv_real = $1;
                   1073:                        }
                   1074:        ;
                   1075: 
                   1076: RealValue:             NumericRealValue
                   1077:        |               SpecialRealValue
                   1078:        ;
                   1079: 
                   1080: SpecialRealValue:      PLUSINFINITY { $$ = PE_REAL_INFINITY;} 
                   1081:        |               MINUSINFINITY { $$ = - PE_REAL_INFINITY; }
                   1082:        ;
                   1083: 
                   1084: NumericRealValue:      LBRACE LITNUMBER COMMA LITNUMBER COMMA
                   1085:                                 LITNUMBER RBRACE {
                   1086:                                if ($4 != 2 && $4 != 10)
                   1087:                                        myyerror ("Illegal base value %d", $4);
                   1088:                                $$ = $2 * pow ((double)$4, (double)$6);
                   1089:                        }
                   1090:        ;
                   1091: 
                   1092: DefinedValue:          ID {
                   1093:                            $$ = new_value (YV_IDEFINED);
                   1094:                            $$ -> yv_identifier = $1;
                   1095:                        }
                   1096:        |               NAME {  /* XXX */
                   1097:                            $$ = new_value (YV_IDEFINED);
                   1098:                            $$ -> yv_identifier = $1;
                   1099:                            $$ -> yv_flags |= YV_BOUND;
                   1100:                        }
                   1101:        |               ID DOT ID {
                   1102:                            $$ = new_value (YV_IDEFINED);
                   1103:                            $$ -> yv_identifier = $3;
                   1104:                            $$ -> yv_module = $1;
                   1105:                        }
                   1106:        ;
                   1107: 
                   1108: IdentifierList:                IdentifierList COMMA ID {
                   1109:                            $$ = new_value (YV_IDEFINED);
                   1110:                            $$ -> yv_identifier = $3;
                   1111:                            if ($1)
                   1112:                                $$ = add_value ($1, $$);
                   1113:                        }
                   1114:        |               empty { $$ = NULLYV; }
                   1115:        ;
                   1116: 
                   1117: Values:                        NamedValueList { $$ = $1; }
                   1118:        |               empty { $$ = NULLYV; }
                   1119:        ;
                   1120: NamedValueList:                NamedValue { $$ = $1; }
                   1121:        |               NamedValueList COMMA NamedValue {
                   1122:                            $$ = add_value ($1, $3);
                   1123:                        }
                   1124:        ;
                   1125: NamedValue:            Value { $$ = $1; }
                   1126:        ;
                   1127: 
                   1128: empty: ;
                   1129: 
                   1130: Octetstring:           OCTET STRING
                   1131:        |               OCTETSTRING
                   1132:        ;
                   1133: 
                   1134: Bitstring:             BITSTRING
                   1135:        |               BIT STRING
                   1136:        ;
                   1137: 
                   1138: SequenceOf:            SEQUENCEOF
                   1139:        |               SEQUENCE OF
                   1140:        ;
                   1141: SetOf:                 SETOF
                   1142:        |               SET OF
                   1143:        ;
                   1144: Components:            COMPONENTSOF
                   1145:        |               COMPONENTS OF
                   1146:        ;
                   1147: 
                   1148: ObjectIdentifierValue: LBRACE ObjIdComponentList RBRACE
                   1149:                        { $$ = $2; }
                   1150:        ;
                   1151: 
                   1152: ObjIdComponentList:    ObjIdComponent
                   1153:        |               ObjIdComponentList ObjIdComponent
                   1154:                        {
                   1155:                                $$ = addoid($1, $2);
                   1156:                                oid_free ($1);
                   1157:                                oid_free ($2);
                   1158:                        }
                   1159:        ;
                   1160: 
                   1161: ObjIdComponent:                NumberForm
                   1162:        |               NameAndNumberForm
                   1163:        ;
                   1164: 
                   1165: NumberForm:            LITNUMBER { $$ = int2oid ($1); }
                   1166:        |               DefinedValue {
                   1167:                                $$ = oidlookup($1->yv_identifier);
                   1168:                                free((char *)$1);
                   1169:                        }
                   1170:        ;
                   1171: 
                   1172: NameAndNumberForm:     NAME LPAREN NumberForm RPAREN {
                   1173:                                free ($1);
                   1174:                                $$ = $3;
                   1175:                        }
                   1176:        ;
                   1177: 
                   1178: SubType:               Type SubtypeSpec
                   1179:        |               SET SizeConstraint OF Sctrl Action Control Type {
                   1180:                            $$ = new_type (YP_SETTYPE);
                   1181:                            $$ -> yp_type = $7;
                   1182:                            if ($4) {
                   1183:                                $$ -> yp_structname = $4 -> ys_structname;
                   1184:                                $$ -> yp_ptrname = $4 -> ys_ptrname;
                   1185:                                free_ys ($4);
                   1186:                            }
                   1187:                            if ($6) {
                   1188:                                $$ -> yp_control = $6;
                   1189:                                $$ -> yp_flags |= YP_CONTROLLED;
                   1190:                            }
                   1191:                            if ($5) {
                   1192:                                $$ -> yp_action3 = $5 -> ya_text;
                   1193:                                $$ -> yp_act2_lineno = $5 -> ya_lineno;
                   1194:                                free_action ($5);
                   1195:                            }                  
                   1196:                        }
                   1197: 
                   1198:        |               SEQUENCE SizeConstraint OF Sctrl Action Control Type {
                   1199:                            $$ = new_type (YP_SEQTYPE);
                   1200:                            $$ -> yp_type = $7;
                   1201:                            if ($4) {
                   1202:                                $$ -> yp_structname = $4 -> ys_structname;
                   1203:                                $$ -> yp_ptrname = $4 -> ys_ptrname;
                   1204:                                free_ys ($4);
                   1205:                            }
                   1206:                            if ($6) {
                   1207:                                $$ -> yp_control = $6;
                   1208:                                $$ -> yp_flags |= YP_CONTROLLED;
                   1209:                            }
                   1210:                            if ($5) {
                   1211:                                $$ -> yp_action3 = $5 -> ya_text;
                   1212:                                $$ -> yp_act3_lineno = $5 -> ya_lineno;
                   1213:                                free_action ($5);
                   1214:                            }
                   1215:                        }
                   1216:        ;
                   1217: 
                   1218: SubtypeSpec:           LPAREN SubtypeAlternative SubtypeAlternativeList RPAREN
                   1219:        ;
                   1220: 
                   1221: SubtypeAlternative:    SubtypeValueSet
                   1222:        |               SubtypeConstraint
                   1223:        ;
                   1224: 
                   1225: SubtypeAlternativeList:        BAR SubtypeAlternative SubtypeAlternativeList
                   1226:        |               empty
                   1227:        ;
                   1228: 
                   1229: SubtypeValueSet:       Value
                   1230:        |               ContainedSubType
                   1231:        |               ValueRange
                   1232:        |               PermittedAlphabet
                   1233:        ;
                   1234: 
                   1235: SubtypeConstraint:     SizeConstraint
                   1236:        |               InnerTypeConstraint
                   1237:        ;
                   1238: 
                   1239: ContainedSubType:      INCLUDES Type   ;
                   1240: 
                   1241: ValueRange:            LowerEndPoint DOTDOT UpperEndpoint
                   1242:        ;
                   1243: 
                   1244: LowerEndPoint:         LowerEndValue
                   1245:        |               LowerEndValue LANGLE
                   1246:        ;
                   1247: 
                   1248: UpperEndpoint:         UpperEndValue
                   1249:        |               LANGLE UpperEndValue
                   1250:        ;
                   1251: 
                   1252: LowerEndValue:         Value
                   1253:        |               MIN
                   1254:        ;
                   1255: 
                   1256: UpperEndValue:         Value
                   1257:        |               MAX
                   1258:        ;
                   1259: 
                   1260: SizeConstraint:                SIZE SubtypeSpec
                   1261:        ;
                   1262: 
                   1263: PermittedAlphabet:     FROM SubtypeSpec
                   1264:        ;
                   1265: 
                   1266: InnerTypeConstraint:   WITH COMPONENT SingleTypeConstraint
                   1267:        |               WITH COMPONENTS MultipleTypeConstraints
                   1268:        ;
                   1269: 
                   1270: SingleTypeConstraint:  SubtypeSpec
                   1271:        ;
                   1272: 
                   1273: MultipleTypeConstraints:FullSpecification
                   1274:        |               PartialSpecification
                   1275:        ;
                   1276: 
                   1277: FullSpecification:     LBRACE TypeConstraints RBRACE
                   1278:        ;
                   1279: 
                   1280: PartialSpecification:  LBRACE DOTDOTDOT COMMA TypeConstraints RBRACE
                   1281:        ;
                   1282: 
                   1283: TypeConstraints:       NamedConstraint
                   1284:        |               NamedConstraint COMMA TypeConstraints
                   1285:        ;
                   1286: 
                   1287: NamedConstraint:       NAME Constraint
                   1288:        |               Constraint
                   1289:        ;
                   1290: 
                   1291: Constraint:            ValueConstraint
                   1292:        |               PresenceConstraint
                   1293:        |               empty
                   1294:        ;
                   1295: 
                   1296: ValueConstraint:       SubtypeSpec
                   1297:        ;
                   1298: 
                   1299: PresenceConstraint:    PRESENT
                   1300:        |               ABSENT
                   1301:        ;
                   1302: 
                   1303: Sctrl:                 SCTRL { $$ = new_ys ($1); }
                   1304:        |               empty { $$ = NULLYS; }
                   1305:        ;
                   1306: %%
                   1307: 
                   1308: #ifdef HPUX
                   1309: #define        uchar   Uchar
                   1310: #endif
                   1311: #include "lex.c"

unix.superglobalmegacorp.com

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