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