Blame src/util/ss/ct.y

Packit fd8b60
%{
Packit fd8b60
/*
Packit fd8b60
 * Copyright 1987 by MIT Student Information Processing Board
Packit fd8b60
 *
Packit fd8b60
 * For copyright info, see mit-sipb-copyright.h.
Packit fd8b60
 */
Packit fd8b60
#include <stdio.h>
Packit fd8b60
#include <string.h>
Packit fd8b60
Packit fd8b60
#ifndef HAS_STRDUP
Packit fd8b60
extern char *strdup();
Packit fd8b60
#endif
Packit fd8b60
Packit fd8b60
char *str_concat3(), *generate_rqte(), *quote();
Packit fd8b60
long flag_value();
Packit fd8b60
char *last_token = (char *)NULL;
Packit fd8b60
FILE *output_file;
Packit fd8b60
long gensym_n = 0;
Packit fd8b60
Packit fd8b60
%}
Packit fd8b60
%union {
Packit fd8b60
	char *dynstr;
Packit fd8b60
	long flags;
Packit fd8b60
}
Packit fd8b60
Packit fd8b60
%token COMMAND_TABLE REQUEST UNKNOWN UNIMPLEMENTED END
Packit fd8b60
%token <dynstr> STRING
Packit fd8b60
%token <dynstr> FLAGNAME
Packit fd8b60
%type <dynstr> namelist header request_list
Packit fd8b60
%type <dynstr> request_entry
Packit fd8b60
%type <flags> flag_list options
Packit fd8b60
%left OPTIONS
Packit fd8b60
%{
Packit fd8b60
#include "ss.h"
Packit fd8b60
%}
Packit fd8b60
%start command_table
Packit fd8b60
%%
Packit fd8b60
command_table :	header request_list END ';'
Packit fd8b60
		{ write_ct($1, $2); }
Packit fd8b60
	;
Packit fd8b60
Packit fd8b60
header	:	COMMAND_TABLE STRING ';'
Packit fd8b60
		{ $$ = $2; }
Packit fd8b60
	;
Packit fd8b60
Packit fd8b60
request_list :	request_list request_entry
Packit fd8b60
		{ $$ = str_concat3($1, $2, ""); }
Packit fd8b60
	|
Packit fd8b60
		{ $$ = ""; }
Packit fd8b60
	;
Packit fd8b60
Packit fd8b60
request_entry :	REQUEST STRING ',' STRING ',' namelist ',' options ';'
Packit fd8b60
		{ $$ = generate_rqte($2, quote($4), $6, $8); }
Packit fd8b60
	|	REQUEST STRING ',' STRING ',' namelist ';'
Packit fd8b60
		{ $$ = generate_rqte($2, quote($4), $6, 0); }
Packit fd8b60
	|	UNKNOWN namelist ';'
Packit fd8b60
		{ $$ = generate_rqte("ss_unknown_request",
Packit fd8b60
					(char *)NULL, $2, 0); }
Packit fd8b60
	|	UNIMPLEMENTED STRING ',' STRING ',' namelist ';'
Packit fd8b60
		{ $$ = generate_rqte("ss_unimplemented", quote($4), $6, 3); }
Packit fd8b60
	;
Packit fd8b60
Packit fd8b60
options	:	'(' flag_list ')'
Packit fd8b60
		{ $$ = $2; }
Packit fd8b60
	|	'(' ')'
Packit fd8b60
		{ $$ = 0; }
Packit fd8b60
	;
Packit fd8b60
Packit fd8b60
flag_list :	flag_list ',' STRING
Packit fd8b60
		{ $$ = $1 | flag_val($3); }
Packit fd8b60
	|	STRING
Packit fd8b60
		{ $$ = flag_val($1); }
Packit fd8b60
	;
Packit fd8b60
Packit fd8b60
namelist: 	STRING
Packit fd8b60
		{ $$ = quote(strdup($1)); }
Packit fd8b60
	|	namelist ',' STRING
Packit fd8b60
		{ $$ = str_concat3($1, quote($3), ",\n    "); }
Packit fd8b60
	;
Packit fd8b60
Packit fd8b60
%%