/* $OpenXM: OpenXM/src/kan96xx/trans/yy_polymake.y,v 1.2 2004/04/08 01:49:04 takayama Exp $ */ /* yacc -d -b yy_polymake -p PM yy_polymake.y */ /* yacc -d -b yy_polymake -p PM yy_polymake.y ; gcc yylex_polymake.c yy_polymake.tab.c*/ %{ #include #include "yylex_polymake.h" %} %token PM_emptyLine PM_keyword PM_LCurryBrace PM_RCurryBrace %token PM_number PM_newline %% program : programList { pmPrintObject(stdout,$1); fprintf(stdout,"\n"); } | pmemptyLine programList { pmPrintObject(stdout,$2); fprintf(stdout,"\n"); } ; programList : pmdata { pmObjectp ob; ob = pmNewTreeObject("data"); ob = pmAddChild($1,ob); $$ = ob; } | pmdata programList { pmObjectp ob; ob = $2; ob = pmAddChild($1,ob); $$ = ob; } ; pmnumberList : PM_number { $$=pmNewListObject($1); } | PM_number pmnumberList { pmObjectp t; t = $2; if (t->tag != PMobject_list) { fprintf(stderr,"pmnumberList: list is broken."); $$=$1; }else{ $$=pmCons($1,(struct pmList *)(t->body)); } } ; pmline : pmnumberList PM_newline { $$=$1; } | PM_LCurryBrace pmnumberList PM_RCurryBrace PM_newline { $$=$2; } ; pmlineList : pmline { $$=pmNewListObject($1); } | pmline pmlineList { pmObjectp t; t = $2; if (t->tag != PMobject_list) { fprintf(stderr,"pmlineList: list is broken."); $$=$1; }else{ $$=pmCons($1,(struct pmList *)(t->body)); } } ; pmdata : PM_keyword PM_newline pmemptyLine { $$=pmNewTreeObjecto($1); } | PM_keyword PM_newline pmlineList pmemptyLine { pmObjectp ob; ob = pmNewTreeObjecto($1); ob = pmAddChild($3,ob); $$=ob; } ; pmemptyLine : PM_emptyLine ;