Annotation of 43BSD/contrib/courier/compiler/courier.y, revision 1.1.1.1

1.1       root        1: %{
                      2: #ifndef lint
                      3: static char sccsid[] = "@(#)courier.y  4.2 (Berkeley) 7/7/83";
                      4: #endif
                      5: 
                      6: #include "Courier.h"
                      7: %}
                      8: 
                      9: %token
                     10:        identifier      number
                     11: 
                     12: %token
                     13:        ARRAY           _BEGIN          BOOLEAN         CARDINAL
                     14:        CHOICE          DEPENDS         END             ERROR
                     15:        INTEGER         LONG            OF              PROCEDURE
                     16:        PROGRAM         RECORD          REPORTS         RETURNS
                     17:        SEQUENCE        STRING          TYPE            UNSPECIFIED
                     18:        UPON            VERSION
                     19: 
                     20: %union {
                     21:        int integer;
                     22:        struct object *object;
                     23:        list list;
                     24: }
                     25: 
                     26: %type <object>
                     27:        identifier              number 
                     28:        ConstructedType         DesignatorType          MaximumNumber
                     29:        NumericValue            PredefinedType          ProgramHeader
                     30:        ReferencedConstant      ReferencedType          Type
                     31: 
                     32: %type <list>
                     33:        ArgumentList            Candidate               CandidateList
                     34:        Correspondence          CorrespondenceList      Designator
                     35:        DesignatorList          ErrorList               Field
                     36:        FieldList               NameList                ResultList
                     37: 
                     38: %start Program
                     39: 
                     40: %%
                     41: 
                     42: Program :
                     43:                ProgramHeader ProgramBody
                     44:                = {
                     45:                        program($1);
                     46:                }
                     47:        ;
                     48: 
                     49: ProgramHeader :
                     50:                identifier ':' PROGRAM '='
                     51:                = {
                     52:                        program_header($1);
                     53:                        $$ = $1;
                     54:                }
                     55:        |
                     56:                identifier ':' PROGRAM number VERSION number '='
                     57:                = {
                     58:                        program_header($1);
                     59:                        $$ = $1;
                     60:                }
                     61:        ;
                     62: 
                     63: ProgramBody :
                     64:                _BEGIN DependencyList DeclarationList END '.'
                     65:        ;
                     66: 
                     67: DependencyList :
                     68:                /* empty */
                     69:        |       DEPENDS UPON ReferencedProgramList ';'
                     70:                = {
                     71:                        yyerror("Dependencies on other Courier programs are not supported");
                     72:                }
                     73:        ;
                     74: 
                     75: ReferencedProgramList :
                     76:                ReferencedProgram
                     77:        |       ReferencedProgramList ',' ReferencedProgram
                     78:        ;
                     79: 
                     80: ReferencedProgram :
                     81:                identifier '(' number ')' VERSION number
                     82:        ;
                     83: 
                     84: DeclarationList :
                     85:                /* empty */
                     86:        |       DeclarationList Declaration
                     87:        ;
                     88: 
                     89: Declaration :
                     90:                identifier ':' TYPE '=' Type ';'
                     91:                = {
                     92:                        compile_type($1, $5);
                     93:                }
                     94:        |       identifier ':' Type '=' NumericValue ';'
                     95:                = {
                     96:                        if (type_check($3, $5)) {
                     97:                                compile_def($1, $3, $5);
                     98:                        } else
                     99:                                yyerror("Type clash in declaration of %s",
                    100:                                        name_of($1));
                    101:                }
                    102:        ;
                    103: 
                    104: Type :
                    105:                PredefinedType
                    106:                = {
                    107:                        type_functions($1);
                    108:                        $$ = $1;
                    109:                }
                    110:        |       ConstructedType
                    111:                = {
                    112:                        type_functions($1);
                    113:                        $$ = $1;
                    114:                }
                    115:        |       ReferencedType
                    116:                = {
                    117:                        type_functions($1);
                    118:                        $$ = $1;
                    119:                }
                    120:        ;
                    121: 
                    122: PredefinedType :
                    123:                BOOLEAN
                    124:                = {
                    125:                        $$ = Boolean_type;
                    126:                }
                    127:        |       CARDINAL
                    128:                = {
                    129:                        $$ = Cardinal_type;
                    130:                }
                    131:        |       LONG CARDINAL
                    132:                = {
                    133:                        $$ = LongCardinal_type;
                    134:                }
                    135:        |       INTEGER
                    136:                = {
                    137:                        $$ = Integer_type;
                    138:                }
                    139:        |       LONG INTEGER
                    140:                = {
                    141:                        $$ = LongInteger_type;
                    142:                }
                    143:        |       STRING
                    144:                = {
                    145:                        $$ = String_type;
                    146:                }
                    147:        |       UNSPECIFIED
                    148:                = {
                    149:                        $$ = Unspecified_type;
                    150:                }
                    151:        |       LONG UNSPECIFIED
                    152:                = {
                    153:                        $$ = LongUnspecified_type;
                    154:                }
                    155:        ;
                    156: 
                    157: ConstructedType :
                    158:                '{' CorrespondenceList '}'
                    159:                = {
                    160:                        $$ = construct_type1(C_ENUMERATION, $2);
                    161:                }
                    162:        |       ARRAY NumericValue OF Type
                    163:                = {
                    164:                        $$ = construct_type2(C_ARRAY, $2, $4);
                    165:                }
                    166:        |       SEQUENCE MaximumNumber OF Type
                    167:                = {
                    168:                        $$ = construct_type2(C_SEQUENCE, $2, $4);
                    169:                }
                    170:        |       RECORD ArgumentList
                    171:                = {
                    172:                        $$ = construct_type1(C_RECORD, $2);
                    173:                }
                    174:        |       CHOICE DesignatorType OF '{' CandidateList '}'
                    175:                = {
                    176:                        $$ = construct_choice($2, $5);
                    177:                }
                    178:        |       PROCEDURE ArgumentList ResultList ErrorList
                    179:                = {
                    180:                        $$ = construct_procedure($2, $3, $4);
                    181:                }
                    182:        |       ERROR ArgumentList
                    183:                = {
                    184:                        $$ = construct_type1(C_ERROR, $2);
                    185:                }
                    186:        ;
                    187: 
                    188: ReferencedType :
                    189:                identifier
                    190:                = {
                    191:                        if (check_def($1))
                    192:                                $$ = $1;
                    193:                        else
                    194:                                $$ = Unspecified_type;
                    195:                }
                    196:        |       identifier '.' identifier
                    197:                = {
                    198:                        yyerror("References to types in other Courier programs are not supported");
                    199:                        $$ = Unspecified_type;
                    200:                }
                    201:        ;
                    202: 
                    203: CorrespondenceList :
                    204:                Correspondence
                    205:                = {
                    206:                        $$ = cons($1, NIL);
                    207:                }
                    208:        |       CorrespondenceList ',' Correspondence
                    209:                = {
                    210:                        $$ = nconc($1, cons($3, NIL));
                    211:                }
                    212:        ;
                    213: 
                    214: Correspondence :
                    215:                identifier '(' NumericValue ')'
                    216:                = {
                    217:                        $$ = cons($1, $3);
                    218:                }
                    219:        ;
                    220: 
                    221: MaximumNumber :
                    222:                NumericValue
                    223:                = {
                    224:                        $$ = $1;
                    225:                }
                    226:        |       /* empty */
                    227:                = {
                    228:                        $$ = NIL;
                    229:                }
                    230:        ;
                    231: 
                    232: NumericValue :
                    233:                number
                    234:                = {
                    235:                        $$ = $1;
                    236:                }
                    237:        |       ReferencedConstant
                    238:                = {
                    239:                        $$ = $1;
                    240:                }
                    241:        ;
                    242: 
                    243: DesignatorType :
                    244:                /* empty */
                    245:                = {
                    246:                        $$ = NIL;
                    247:                }
                    248:        |       ReferencedType
                    249:                = {
                    250:                        $$ = $1;
                    251:                }
                    252:        ;
                    253: 
                    254: CandidateList :
                    255:                Candidate
                    256:                = {
                    257:                        $$ = cons($1, NIL);
                    258:                }
                    259:        |       CandidateList ',' Candidate
                    260:                = {
                    261:                        $$ = nconc($1, cons($3, NIL));
                    262:                }
                    263:        ;
                    264: 
                    265: Candidate :
                    266:                DesignatorList '=''>' Type
                    267:                = {
                    268:                        $$ = cons($1, $4);
                    269:                }
                    270:        ;
                    271: 
                    272: DesignatorList :
                    273:                Designator
                    274:                = {
                    275:                        $$ = cons($1, NIL);
                    276:                }
                    277:        |       DesignatorList ',' Designator
                    278:                = {
                    279:                        $$ = nconc($1, cons($3, NIL));
                    280:                }
                    281:        ;
                    282: 
                    283: Designator :
                    284:                identifier
                    285:                = {
                    286:                        $$ = cons($1, NIL);
                    287:                }
                    288:        |       Correspondence
                    289:                = {
                    290:                        $$ = $1;
                    291:                }
                    292:        ;
                    293: 
                    294: ArgumentList :
                    295:                /* empty */
                    296:                = {
                    297:                        $$ = NIL;
                    298:                }
                    299:        |       '[' FieldList ']'
                    300:                = {
                    301:                        $$ = $2;
                    302:                }
                    303:        ;
                    304: 
                    305: ResultList :
                    306:                /* empty */
                    307:                = {
                    308:                        $$ = NIL;
                    309:                }
                    310:        |       RETURNS '[' FieldList ']'
                    311:                = {
                    312:                        $$ = $3;
                    313:                }
                    314:        ;
                    315: 
                    316: ErrorList :
                    317:                /* empty */
                    318:                = {
                    319:                        $$ = NIL;
                    320:                }
                    321:        |       REPORTS '[' NameList ']'
                    322:                = {
                    323:                        $$ = $3;
                    324:                }
                    325:        ;
                    326: 
                    327: FieldList :
                    328:                Field
                    329:                = {
                    330:                        $$ = cons($1, NIL);
                    331:                }
                    332:        |       FieldList ',' Field
                    333:                = {
                    334:                        $$ = nconc($1, cons($3, NIL));
                    335:                }
                    336:        ;
                    337: 
                    338: Field :
                    339:                NameList ':' Type
                    340:                = {
                    341:                        $$ = cons($1, $3);
                    342:                }
                    343:        ;
                    344: 
                    345: 
                    346: ReferencedConstant :
                    347:                identifier
                    348:                = {
                    349:                        if (check_def($1))
                    350:                                $$ = $1;
                    351:                        else
                    352:                                $$ = Undefined_constant;
                    353:                }
                    354:        |       identifier '.' identifier
                    355:                = {
                    356:                        yyerror("References to constants in other Courier programs are not supported");
                    357:                        $$ = Undefined_constant;
                    358:                }
                    359:        ;
                    360: 
                    361: NameList :
                    362:                identifier
                    363:                = {
                    364:                        $$ = cons($1, NIL);
                    365:                }
                    366:        |       NameList ',' identifier
                    367:                = {
                    368:                        $$ = nconc($1, cons($3, NIL));
                    369:                }
                    370:        ;

unix.superglobalmegacorp.com

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