version 1.1, 2003/11/20 00:06:07 |
version 1.2, 2003/11/20 03:25:08 |
|
|
/* $OpenXM$ */ |
/* $OpenXM: OpenXM/src/kan96xx/Kan/yylex_polymake.c,v 1.1 2003/11/20 00:06:07 takayama Exp $ */ |
/* parser for polymake output */ |
/* parser for polymake output */ |
/* This program requires |
/* This program requires |
|
|
Line 194 pmObjectp pmCons(pmObjectp a,struct pmList *b) { |
|
Line 194 pmObjectp pmCons(pmObjectp a,struct pmList *b) { |
|
t->right = b; |
t->right = b; |
return ob; |
return ob; |
} |
} |
|
|
|
int pmListLength(struct pmList *list) { |
|
struct pmList *t; |
|
int n; |
|
if (list == NULL) return 0; |
|
n = 0; |
|
t = list; |
|
while (t != NULL) { |
|
n++; t = t->right; |
|
} |
|
return n; |
|
} |
|
|
|
pmObjectp pmNewTreeObjecto(pmObjectp s) |
|
{ |
|
if ((s == NULL) || (s->tag != PMobject_str)) { |
|
warning_yylex_polymake("Invalid argument for pmNewObjecto\n"); |
|
return pmNewTreeObject("?"); |
|
} |
|
return pmNewTreeObject((char *)(s->body)); |
|
} |
|
pmObjectp pmNewTreeObject(char *s) { |
|
pmObjectp ob; |
|
struct pmTree *aa; |
|
ob = (pmObjectp) mymalloc(sizeof(struct pmObject)); |
|
if (ob == NULL) { |
|
fprintf(stderr,"No more memory.\n"); |
|
exit(10); |
|
} |
|
aa= (struct pmTree *)mymalloc(sizeof(struct pmTree)); |
|
if (aa == NULL) { |
|
fprintf(stderr,"No more memory.\n"); |
|
exit(10); |
|
} |
|
aa->nodeName = s; |
|
aa->attrList = NULL; |
|
aa->childs = NULL; |
|
ob->tag = PMobject_tree; |
|
ob->body = aa; |
|
return ob; |
|
} |
|
|
|
pmObjectp pmAddAttr(pmObjectp c,pmObjectp a) { |
|
struct pmTree *tree; |
|
if (a->tag != PMobject_tree) { |
|
warning_yylex_polymake("pmAddAttr: the argument is not tree object.\n"); |
|
return a; |
|
} |
|
tree = a->body; |
|
if (tree->attrList == NULL) { |
|
tree->attrList = pmNewListObject(c); |
|
}else{ |
|
if (tree->attrList->tag == PMobject_list) { |
|
tree->attrList = pmCons(c,(struct pmList *)(tree->attrList->body)); |
|
}else{ |
|
warning_yylex_polymake("pmAddAttr: the attrbute list is broken.\n"); |
|
} |
|
} |
|
return a; |
|
} |
|
|
|
/* Add c to the tree a */ |
|
pmObjectp pmAddChild(pmObjectp c,pmObjectp a) { |
|
struct pmTree *tree; |
|
if (a->tag != PMobject_tree) { |
|
warning_yylex_polymake("pmAddAttr: the argument is not tree object.\n"); |
|
return a; |
|
} |
|
tree = a->body; |
|
if (tree->childs == NULL) { |
|
tree->childs = pmNewListObject(c); |
|
}else{ |
|
if (tree->childs->tag == PMobject_list) { |
|
tree->childs = pmCons(c,(struct pmList *)(tree->childs->body)); |
|
}else{ |
|
warning_yylex_polymake("pmAddAttr: the child list is broken.\n"); |
|
} |
|
} |
|
return a; |
|
} |
|
|
|
warning_yylex_polymake(char *s) { |
|
fprintf(stderr,"Warning: %s",s); |
|
} |
void pmPrintObject(FILE *fp,pmObjectp p) { |
void pmPrintObject(FILE *fp,pmObjectp p) { |
int n,i; |
int n,i; |
struct pmList *list; |
struct pmList *list; |
struct pmList *t; |
struct pmList *t; |
|
struct pmTree *tree; |
if (p == NULL) { |
if (p == NULL) { |
/* fprintf(stderr,"NULL "); */ |
/* fprintf(stderr,"NULL "); */ |
return; |
return; |
Line 210 void pmPrintObject(FILE *fp,pmObjectp p) { |
|
Line 295 void pmPrintObject(FILE *fp,pmObjectp p) { |
|
case PMobject_list: |
case PMobject_list: |
list = (struct pmList *)(p->body); |
list = (struct pmList *)(p->body); |
if (list == NULL) break; |
if (list == NULL) break; |
t = list; n = 0; |
n = pmListLength(list); |
while (t != NULL) { |
|
n++; |
|
t = t->right; |
|
} |
|
t = list; |
t = list; |
fprintf(fp,"["); |
fprintf(fp,"["); |
for (i=0; i<n; i++) { |
for (i=0; i<n; i++) { |
Line 223 void pmPrintObject(FILE *fp,pmObjectp p) { |
|
Line 304 void pmPrintObject(FILE *fp,pmObjectp p) { |
|
if (t == NULL) break; else t = t->right; |
if (t == NULL) break; else t = t->right; |
} |
} |
fprintf(fp,"]"); |
fprintf(fp,"]"); |
|
break; |
|
case PMobject_tree: |
|
tree = p->body; |
|
fprintf(fp,"polymake.%s(",tree->nodeName); |
|
/* Ignore attribute list */ |
|
if (tree->childs == NULL) {n = 0; t = NULL; } |
|
else { |
|
t = tree->childs->body; |
|
n = pmListLength(t); |
|
} |
|
for (i=0; i<n; i++) { |
|
pmPrintObject(fp,t->left); |
|
t = t->right; |
|
if (i != n-1) fprintf(fp,","); |
|
} |
|
fprintf(fp,")"); |
break; |
break; |
default: |
default: |
fprintf(stderr,"Unknown object tag %d.\n",p->tag); |
fprintf(stderr,"Unknown object tag %d.\n",p->tag); |