1 %{ 2 /* 3 * Copyright 1987 by MIT Student Information Processing Board 4 * 5 * For copyright info, see mit-sipb-copyright.h. 6 */ 7 #include <stdio.h> 8 #include <string.h> 9 10 #ifndef HAS_STRDUP 11 extern char *strdup(); 12 #endif 13 14 char *str_concat3(), *generate_rqte(), *quote(); 15 long flag_value(); 16 char *last_token = (char *)NULL; 17 FILE *output_file; 18 long gensym_n = 0; 19 20 %} 21 %union { 22 char *dynstr; 23 long flags; 24 } 25 26 %token COMMAND_TABLE REQUEST UNKNOWN UNIMPLEMENTED END 27 %token <dynstr> STRING 28 %token <dynstr> FLAGNAME 29 %type <dynstr> namelist header request_list 30 %type <dynstr> request_entry 31 %type <flags> flag_list options 32 %left OPTIONS 33 %{ 34 #include "ss.h" 35 %} 36 %start command_table 37 %% 38 command_table : header request_list END ';' 39 { write_ct($1, $2); } 40 ; 41 42 header : COMMAND_TABLE STRING ';' 43 { $$ = $2; } 44 ; 45 46 request_list : request_list request_entry 47 { $$ = str_concat3($1, $2, ""); } 48 | 49 { $$ = ""; } 50 ; 51 52 request_entry : REQUEST STRING ',' STRING ',' namelist ',' options ';' 53 { $$ = generate_rqte($2, quote($4), $6, $8); } 54 | REQUEST STRING ',' STRING ',' namelist ';' 55 { $$ = generate_rqte($2, quote($4), $6, 0); } 56 | UNKNOWN namelist ';' 57 { $$ = generate_rqte("ss_unknown_request", 58 (char *)NULL, $2, 0); } 59 | UNIMPLEMENTED STRING ',' STRING ',' namelist ';' 60 { $$ = generate_rqte("ss_unimplemented", quote($4), $6, 3); } 61 ; 62 63 options : '(' flag_list ')' 64 { $$ = $2; } 65 | '(' ')' 66 { $$ = 0; } 67 ; 68 69 flag_list : flag_list ',' STRING 70 { $$ = $1 | flag_val($3); } 71 | STRING 72 { $$ = flag_val($1); } 73 ; 74 75 namelist: STRING 76 { $$ = quote(strdup($1)); } 77 | namelist ',' STRING 78 { $$ = str_concat3($1, quote($3), ",\n "); } 79 ; 80 81 %% 82