|
|
1.1 ! root 1: %{ ! 2: #ifndef lint ! 3: static char sccsid[] = "@(#)parse.y 4.2 (Berkeley) 10/21/82"; ! 4: #endif ! 5: ! 6: #include "htable.h" ! 7: %} ! 8: ! 9: %union { ! 10: int number; ! 11: struct addr *addrlist; ! 12: struct name *namelist; ! 13: } ! 14: %start Table ! 15: ! 16: %token END ! 17: %token <number> NUMBER KEYWORD ! 18: %token <namelist> NAME ! 19: ! 20: %type <namelist> Names Cputype Opsys Protos Proto ! 21: %type <addrlist> Addresses Address ! 22: %% ! 23: Table : Entry ! 24: | Table Entry ! 25: ; ! 26: ! 27: Entry : KEYWORD ':' Addresses ':' Names ':' END ! 28: = { ! 29: do_entry($1, $3, $5, NONAME, NONAME, NONAME); ! 30: } ! 31: | KEYWORD ':' Addresses ':' Names ':' Cputype ':' END ! 32: = { ! 33: do_entry($1, $3, $5, $7, NONAME, NONAME); ! 34: } ! 35: | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' END ! 36: = { ! 37: do_entry($1, $3, $5, $7, $9, NONAME); ! 38: } ! 39: | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' ':' END ! 40: = { ! 41: do_entry($1, $3, $5, $7, $9, NONAME); ! 42: } ! 43: | KEYWORD ':' Addresses ':' Names ':' Cputype ':' Opsys ':' Protos ':' END ! 44: = { ! 45: do_entry($1, $3, $5, $7, $9, $11); ! 46: } ! 47: | error END ! 48: | END /* blank line */ ! 49: ; ! 50: ! 51: Addresses: Address ! 52: = { ! 53: $$ = $1; ! 54: } ! 55: | Address ',' Addresses ! 56: = { ! 57: $1->addr_link = $3; ! 58: $$ = $1; ! 59: } ! 60: ; ! 61: ! 62: Address : NUMBER '.' NUMBER '.' NUMBER '.' NUMBER ! 63: = { ! 64: char *a; ! 65: ! 66: $$ = (struct addr *)malloc(sizeof (struct addr)); ! 67: a = (char *)&($$->addr_val); ! 68: a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7; ! 69: $$->addr_link = NOADDR; ! 70: } ! 71: ; ! 72: ! 73: Names : NAME ! 74: = { ! 75: $$ = $1; ! 76: } ! 77: | NAME ',' Names ! 78: = { ! 79: $1->name_link = $3; ! 80: $$ = $1; ! 81: } ! 82: ; ! 83: ! 84: Cputype : /* empty */ ! 85: = { ! 86: $$ = NONAME; ! 87: } ! 88: | NAME ! 89: = { ! 90: $$ = $1; ! 91: } ! 92: ; ! 93: ! 94: Opsys : /* empty */ ! 95: = { ! 96: $$ = NONAME; ! 97: } ! 98: | NAME ! 99: = { ! 100: $$ = $1; ! 101: } ! 102: ; ! 103: ! 104: Protos : Proto ! 105: = { ! 106: $$ = $1; ! 107: } ! 108: | Proto ',' Protos ! 109: = { ! 110: $1->name_link = $3; ! 111: $$ = $1; ! 112: } ! 113: ; ! 114: ! 115: Proto : NAME ! 116: = { ! 117: $$ = $1; ! 118: } ! 119: ; ! 120: %% ! 121: ! 122: #include <stdio.h> ! 123: ! 124: extern int yylineno; ! 125: ! 126: yyerror(msg) ! 127: char *msg; ! 128: { ! 129: fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg); ! 130: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.