incrgram.ypp   [plain text]


%{
#pragma prototyped
#include "incrface/incrcmds.h"
%}

%token <i> T_graph T_node T_edge T_view
%token <i> T_open T_close T_insert T_delete T_modify T_lock T_unlock T_segue T_message
%token <str> T_id
%token <i> T_edgeop T_subgraph
%type <str> viewid

%union	{
			int				i;
			char			*str;
}

%%

session		:  commands 
//			|  /* empty */
			;

commands	:	commands command '\n'
			|	/* empty */
			;

command		:
			ins_node | ins_edge
			| mod_node | mod_edge
			| del_node | del_edge
			| open_view | close_view | mod_view
			| lock_view | unlock_view
			| segue
                        | message
			| nop
			|  error	{incr_abort(IF_ERR_SYNTAX);}
			;

nop			:	/* empty */
			;

message : T_message T_id {incr_message($2);}
			;

open_view	:	T_open T_view open_view2 {}
			;

open_view2 : viewid attrlist	{incr_open_view($1);}
			;

close_view	:	T_close T_view viewid		{incr_close_view($3);}
			;

mod_view	:	T_modify T_view viewid attrlist {incr_mod_view($3);}
			;

lock_view : T_lock T_view viewid {incr_lock($3);}
			;

unlock_view : T_unlock T_view viewid {incr_unlock($3);}
			;

segue : T_segue T_view viewid {incr_segue($3);}
                        ; 

ins_node	:	T_insert viewid T_node T_id attrlist	{incr_ins_node($2,$4);}
			;

mod_node	:	T_modify viewid T_node T_id attrlist	{incr_mod_node($2,$4);}
			;

del_node	:	T_delete viewid T_node T_id	{incr_del_node($2,$4);}
			;

ins_edge	:	T_insert viewid T_edge T_id T_id T_id attrlist {incr_ins_edge($2,$4,$5,$6);}
			;

mod_edge	:	T_modify viewid T_edge T_id attrlist {incr_mod_edge($2,$4);}
			;

del_edge	:	T_delete viewid T_edge T_id	{incr_del_edge($2,$4);}
			;

attrlist	: 	'[' {incr_reset_attrs();} optattrdefs ']'
			|	{incr_reset_attrs();} /* empty */
			;

optattrdefs	: 	attrdefs
			| /* empty */
			;

attrdefs	:  attritem
			|  attrdefs optsep attritem
			;

attritem	:  T_id '=' T_id			{incr_append_attr($1,$3);}
			;

optsep 		:  ';' | ',' | /*empty*/ ;
 
viewid		:	T_id {$$ = $1; } ;