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