X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bfc9b3ffef6e41c90e64b271ed981fabe05676cc..1cd1a5695d7e05cd3dd2460eee2a3eaf0cee12c7:/src/xbt/graphxml.l diff --git a/src/xbt/graphxml.l b/src/xbt/graphxml.l index 8384a8fd09..26d2508a42 100644 --- a/src/xbt/graphxml.l +++ b/src/xbt/graphxml.l @@ -1,9 +1,10 @@ -/* Validating XML processor for graphxml.dtd. - * Generated 2006/03/20 16:15:21. +/* Validating XML processor for xbt/graphxml.dtd. + * Generated 2007/08/09 10:57:49. * * This program was generated with the FleXML XML processor generator. - * FleXML is Copyright © 1999-2005 Kristoffer Rose. All rights reserved. - * (Id: flexml.pl,v 1.45 2006/03/03 19:25:46 wdowling Exp). + * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. + * FleXML is Copyright (C) 2003-2006 Martin Quinson. All rights reserved. + * (Id: flexml.pl,v 1.61 2006/09/13 16:34:33 wdowling Exp). * * There are two, intertwined parts to this program, part A and part B. * @@ -11,8 +12,8 @@ * ------ * * Some parts, here collectively called "Part A", are found in the - * FleXML package. They are Copyright © 1999-2005 Kristoffer Rose. - * All rights reserved. + * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose + * and Copyright (C) 2003-2006 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: @@ -47,10 +48,10 @@ %{ /* Version strings. */ -const char rcs_grahxml_flexml_skeleton[] = - "$" "Id: skel,v 1.26 2005/02/23 22:22:20 wdowling Exp $"; -const char rcs_grahxml_flexml[] = - "$" "Id: flexml.pl,v 1.45 2006/03/03 19:25:46 wdowling Exp $"; +const char rcs_graphxml_flexml_skeleton[] = + "$" "Id: skel,v 1.38 2006/09/12 18:05:45 wdowling Exp $"; +const char rcs_graphxml_flexml[] = + "$" "Id: flexml.pl,v 1.61 2006/09/13 16:34:33 wdowling Exp $"; /* ANSI headers. */ #include @@ -60,20 +61,46 @@ const char rcs_grahxml_flexml[] = #include #include +#ifndef FLEXML_INDEXSTACKSIZE +#define FLEXML_INDEXSTACKSIZE 1000 +#endif + /* Generated definitions. */ #define FLEXML_yylineno +#ifndef FLEXML_BUFFERSTACKSIZE #define FLEXML_BUFFERSTACKSIZE 1000000 +#endif +#define FLEXML_NEED_BUFFERLIT /* XML processor api. */ /* FleXML-provided data. */ -const char* pcdata; -AT_edge_target A_edge_target; -AT_node_name A_node_name; -AT_node_label A_node_label; -AT_edge_label A_edge_label; -AT_edge_source A_edge_source; -AT_edge_isDirected A_edge_isDirected; -AT_edge_name A_edge_name; +int graphxml_pcdata_ix; +extern char *graphxml_bufferstack; +#define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix) +AT_graphxml_node_name AX_graphxml_node_name; +#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name) +AT_graphxml_edge_source AX_graphxml_edge_source; +#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source) +AT_graphxml_node_position_y AX_graphxml_node_position_y; +#define A_graphxml_node_position_y (graphxml_bufferstack + AX_graphxml_node_position_y) +AT_graphxml_node_position_x AX_graphxml_node_position_x; +#define A_graphxml_node_position_x (graphxml_bufferstack + AX_graphxml_node_position_x) +AT_graphxml_edge_data AX_graphxml_edge_data; +#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data) +AT_graphxml_edge_target AX_graphxml_edge_target; +#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target) +AT_graphxml_graph_isDirected AX_graphxml_graph_isDirected; +#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected +AT_graphxml_node_label AX_graphxml_node_label; +#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label) +AT_graphxml_node_data AX_graphxml_node_data; +#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data) +AT_graphxml_edge_label AX_graphxml_edge_label; +#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label) +AT_graphxml_edge_length AX_graphxml_edge_length; +#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length) +AT_graphxml_edge_name AX_graphxml_edge_name; +#define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name) /* XML state. */ #ifdef FLEX_DEBUG @@ -95,64 +122,98 @@ AT_edge_name A_edge_name; #define FAIL return fail static int fail(const char*, ...); -const char * grahxml_parse_err_msg(void); + +enum {flexml_max_err_msg_size = 512}; +static char flexml_err_msg[flexml_max_err_msg_size]; +const char * graphxml_parse_err_msg() +{ + return flexml_err_msg; +} +static void reset_graphxml_parse_err_msg() +{ + flexml_err_msg[0] = '\0'; +} /* Cleanup */ static void cleanup(void); #define CLEANUP cleanup() /* Text buffer stack handling. */ -char bufferstack[FLEXML_BUFFERSTACKSIZE]; -static char* limit = bufferstack + FLEXML_BUFFERSTACKSIZE; -typedef struct BufferLast_s { - struct BufferLast_s *old; char* saved; char new1[1]; -} BufferLast; -#ifdef FLEXML_HasMixed -static BufferLast* last = (BufferLast*)0; -#endif -static char* next = bufferstack; +char *graphxml_bufferstack = NULL; +static int blimit = FLEXML_BUFFERSTACKSIZE; +static int bnext = 1; + +static int *indexstack = NULL; +static int ilimit = FLEXML_INDEXSTACKSIZE; +static int inext = 1; -#define BUFFERSET(P) (P = next) -#define BUFFERPUTC(C) (assert(next= blimit) { + blimit += FLEXML_BUFFERSTACKSIZE + 2; + { + char *temp = (char *) realloc(graphxml_bufferstack, blimit); + assert(temp); + graphxml_bufferstack = temp; + } + } + return 0; +} + +/* after this is called, there are at least 2 slots left in the stack */ +static int ck_ilimit() { - char *s = strchr(text,c), *e = strrchr(text,c); + if (inext >= ilimit) { + ilimit += FLEXML_INDEXSTACKSIZE + 2; + { + int *temp = (int *) realloc(indexstack, ilimit); + assert(temp); + indexstack = temp; + } + } + return 0; +} + +#ifdef FLEXML_NEED_BUFFERLIT +static void graphxml_bufferliteral(char c, int* pp, const char* text) +{ + const char *s = (c ? strchr(text,c) : text-1), *e = strrchr(text,c); assert(s <= e); BUFFERSET(*pp); while (++sold = last; - l->saved = p; - next = l->new1; - last = l; + ck_ilimit(); + indexstack[inext++] = p; + indexstack[inext++] = bnext; } -static char* popbuffer(void) +static int popbuffer(void) { - BufferLast* l = last; - assert(last != (BufferLast*)0); - last = l->old; - next = (char*)l; - return l->saved; + assert(inext >= 2); + bnext = indexstack[--inext]; + return indexstack[--inext]; } -#endif /* General internal entities are `unput' back onto the input stream... */ #define ENTITYTEXT(T) \ { char *s = (T), *e = s+strlen(s);\ while (--e >= s) { unput(*e); }} + + %} /* Flex standard options. */ @@ -194,58 +255,77 @@ Literal \'[^'']*\'|\"[^""]*\" * INPI inside an XML PI * VALUE1 inside a '...'-delimited literal * VALUE2 inside a "..."-delimited literal - * CDATA inside a section. + * CDATA inside a section. * ROOT_ expect root element * AL_ inside the attribute list for * IN_ inside a with element contents (ready for end tag) * IMPOSSIBLE dummy to permit disabling rules; must be last */ %x PROLOG DOCTYPE EPILOG INCOMMENT INPI VALUE1 VALUE2 CDATA -%x ROOT_graph AL_graph S_graph S_graph_1 S_graph_2 S_graph_3 S_graph_4 S_graph_5 E_graph -%x ROOT_node AL_node E_node -%x ROOT_edge AL_edge E_edge +%x ROOT_graphxml_graph AL_graphxml_graph S_graphxml_graph S_graphxml_graph_1 S_graphxml_graph_2 S_graphxml_graph_3 S_graphxml_graph_4 S_graphxml_graph_5 E_graphxml_graph +%x ROOT_graphxml_node AL_graphxml_node E_graphxml_node +%x ROOT_graphxml_edge AL_graphxml_edge E_graphxml_edge %x IMPOSSIBLE %{ /* State names. */ -const char* *grahxml_statenames=NULL; +const char* *graphxml_statenames=NULL; %} %% /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */ SET(PROLOG); + reset_graphxml_parse_err_msg(); + graphxml_bufferstack = (char *) malloc(FLEXML_BUFFERSTACKSIZE); + assert(graphxml_bufferstack); + #ifdef FLEX_DEBUG + { + int i; + for (i = 0; i < blimit; i++) { + graphxml_bufferstack[i] = '\377'; + } + } + #endif + graphxml_bufferstack[0] = '\0'; + indexstack = (int *) malloc(FLEXML_INDEXSTACKSIZE * sizeof(int)); + assert(indexstack); + indexstack[0] = 0; + /* FleXML_init */ - next = bufferstack; - if(!grahxml_statenames) {grahxml_statenames= (const char **)calloc(IMPOSSIBLE,sizeof(char*)); - grahxml_statenames[PROLOG] = NULL; - grahxml_statenames[DOCTYPE] = NULL; - grahxml_statenames[EPILOG] = NULL; - grahxml_statenames[INCOMMENT] = NULL; - grahxml_statenames[INPI] = NULL; - grahxml_statenames[VALUE1] = NULL; - grahxml_statenames[VALUE2] = NULL; - grahxml_statenames[CDATA] = NULL; - grahxml_statenames[ROOT_graph] = NULL; - grahxml_statenames[AL_graph] = NULL; - grahxml_statenames[S_graph] = "graph"; - grahxml_statenames[S_graph_1] = "graph"; - grahxml_statenames[S_graph_2] = "graph"; - grahxml_statenames[S_graph_3] = "graph"; - grahxml_statenames[S_graph_4] = "graph"; - grahxml_statenames[S_graph_5] = "graph"; - grahxml_statenames[E_graph] = "graph"; - grahxml_statenames[ROOT_node] = NULL; - grahxml_statenames[AL_node] = NULL; - grahxml_statenames[E_node] = "node"; - grahxml_statenames[ROOT_edge] = NULL; - grahxml_statenames[AL_edge] = NULL; - grahxml_statenames[E_edge] = "edge"; + bnext = inext = 1; + graphxml_bufferliteral('\0', &bnext, "-1.0"); + graphxml_bufferliteral('\0', &bnext, "-1.0"); + graphxml_bufferliteral('\0', &bnext, "-1.0"); + if(!graphxml_statenames) {graphxml_statenames= (const char **)calloc(IMPOSSIBLE,sizeof(char*)); + graphxml_statenames[PROLOG] = NULL; + graphxml_statenames[DOCTYPE] = NULL; + graphxml_statenames[EPILOG] = NULL; + graphxml_statenames[INCOMMENT] = NULL; + graphxml_statenames[INPI] = NULL; + graphxml_statenames[VALUE1] = NULL; + graphxml_statenames[VALUE2] = NULL; + graphxml_statenames[CDATA] = NULL; + graphxml_statenames[ROOT_graphxml_graph] = NULL; + graphxml_statenames[AL_graphxml_graph] = NULL; + graphxml_statenames[S_graphxml_graph] = "graph"; + graphxml_statenames[S_graphxml_graph_1] = "graph"; + graphxml_statenames[S_graphxml_graph_2] = "graph"; + graphxml_statenames[S_graphxml_graph_3] = "graph"; + graphxml_statenames[S_graphxml_graph_4] = "graph"; + graphxml_statenames[S_graphxml_graph_5] = "graph"; + graphxml_statenames[E_graphxml_graph] = "graph"; + graphxml_statenames[ROOT_graphxml_node] = NULL; + graphxml_statenames[AL_graphxml_node] = NULL; + graphxml_statenames[E_graphxml_node] = "node"; + graphxml_statenames[ROOT_graphxml_edge] = NULL; + graphxml_statenames[AL_graphxml_edge] = NULL; + graphxml_statenames[E_graphxml_edge] = "edge"; } /* COMMENTS and PIs: handled uniformly for efficiency. */ -{ +{ " */ -" */ + +"{ +{ + "isDirected"{Eq}"'true'" | + "isDirected"{Eq}"\"true\"" A_graphxml_graph_isDirected = A_graphxml_graph_isDirected_true; + "isDirected"{Eq}"'false'" | + "isDirected"{Eq}"\"false\"" A_graphxml_graph_isDirected = A_graphxml_graph_isDirected_false; + ">" { - LEAVE; STag_graph();pcdata = NULL; ENTER(S_graph); + LEAVE; STag_graphxml_graph();graphxml_pcdata_ix = 0; ENTER(S_graphxml_graph); } "/>" { - LEAVE; STag_graph(); pcdata = NULL; ETag_graph(); + LEAVE; STag_graphxml_graph(); graphxml_pcdata_ix = 0; ETag_graphxml_graph(); popbuffer(); /* attribute */ switch (YY_START) { - case ROOT_graph: SET(EPILOG); break; + case ROOT_graphxml_graph: SET(EPILOG); break; } } . FAIL("Unexpected character `%c' in attribute list of graph element.", yytext[0]); @@ -306,12 +395,13 @@ const char* *grahxml_statenames=NULL; <> FAIL("EOF in attribute list of `graph' element."); } -{ +{ "" { LEAVE; - ETag_graph(); + ETag_graphxml_graph(); + popbuffer(); /* attribute */ switch (YY_START) { - case ROOT_graph: SET(EPILOG); break; + case ROOT_graphxml_graph: SET(EPILOG); break; } } "" FAIL("Unexpected end-tag `%s': `' expected.",yytext); @@ -321,31 +411,46 @@ const char* *grahxml_statenames=NULL; /* label CDATA "" * name CDATA #REQUIRED + * data CDATA "" + * position_x CDATA "-1.0" + * position_y CDATA "-1.0" * > */ -""{ - "label"{Eq}\' ENTER(VALUE1); BUFFERSET(A_node_label); - "label"{Eq}\" ENTER(VALUE2); BUFFERSET(A_node_label); +{ + "label"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_node_label); + "label"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_node_label); + + "name"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_node_name); + "name"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_node_name); + + "data"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_node_data); + "data"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_node_data); + + "position_x"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_node_position_x); + "position_x"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_node_position_x); - "name"{Eq}\' ENTER(VALUE1); BUFFERSET(A_node_name); - "name"{Eq}\" ENTER(VALUE2); BUFFERSET(A_node_name); + "position_y"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_node_position_y); + "position_y"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_node_position_y); ">" { - if (!A_node_name) FAIL("Required attribute `name' not set for `node' element."); - LEAVE; STag_node();pcdata = NULL; ENTER(E_node); + if (!AX_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element."); + LEAVE; STag_graphxml_node();graphxml_pcdata_ix = 0; ENTER(E_graphxml_node); } "/>" { - if (!A_node_name) FAIL("Required attribute `name' not set for `node' element."); - LEAVE; STag_node(); pcdata = NULL; ETag_node(); + if (!AX_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element."); + LEAVE; STag_graphxml_node(); graphxml_pcdata_ix = 0; ETag_graphxml_node(); popbuffer(); /* attribute */ switch (YY_START) { - case S_graph_2: case S_graph_3: case S_graph: SET(S_graph_3); break; - case ROOT_node: SET(EPILOG); break; + case S_graphxml_graph_2: case S_graphxml_graph_3: case S_graphxml_graph: SET(S_graphxml_graph_3); break; + case ROOT_graphxml_node: SET(EPILOG); break; } } . FAIL("Unexpected character `%c' in attribute list of node element.", yytext[0]); @@ -353,13 +458,14 @@ const char* *grahxml_statenames=NULL; <> FAIL("EOF in attribute list of `node' element."); } -{ +{ "" { LEAVE; - ETag_node(); + ETag_graphxml_node(); + popbuffer(); /* attribute */ switch (YY_START) { - case S_graph_2: case S_graph_3: case S_graph: SET(S_graph_3); break; - case ROOT_node: SET(EPILOG); break; + case S_graphxml_graph_2: case S_graphxml_graph_3: case S_graphxml_graph: SET(S_graphxml_graph_3); break; + case ROOT_graphxml_node: SET(EPILOG); break; } } "" FAIL("Unexpected end-tag `%s': `' expected.",yytext); @@ -368,51 +474,54 @@ const char* *grahxml_statenames=NULL; } /* label CDATA "" - * name CDATA #IMPLIED - * source CDATA #REQUIRED - * target CDATA #REQUIRED - * isDirected (true|false) "true" + * name CDATA #IMPLIED + * source CDATA #REQUIRED + * target CDATA #REQUIRED + * length CDATA "-1.0" + * data CDATA "" * > */ -""{ - "label"{Eq}\' ENTER(VALUE1); BUFFERSET(A_edge_label); - "label"{Eq}\" ENTER(VALUE2); BUFFERSET(A_edge_label); +{ + "label"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_label); + "label"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_label); - "name"{Eq}\' ENTER(VALUE1); BUFFERSET(A_edge_name); - "name"{Eq}\" ENTER(VALUE2); BUFFERSET(A_edge_name); + "name"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_name); + "name"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_name); - "source"{Eq}\' ENTER(VALUE1); BUFFERSET(A_edge_source); - "source"{Eq}\" ENTER(VALUE2); BUFFERSET(A_edge_source); + "source"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_source); + "source"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_source); - "target"{Eq}\' ENTER(VALUE1); BUFFERSET(A_edge_target); - "target"{Eq}\" ENTER(VALUE2); BUFFERSET(A_edge_target); + "target"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_target); + "target"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_target); - "isDirected"{Eq}"'true'" | - "isDirected"{Eq}"\"true\"" A_edge_isDirected = A_edge_isDirected_true; - "isDirected"{Eq}"'false'" | - "isDirected"{Eq}"\"false\"" A_edge_isDirected = A_edge_isDirected_false; + "length"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_length); + "length"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_length); + + "data"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_data); + "data"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_data); ">" { - if (!A_edge_source) FAIL("Required attribute `source' not set for `edge' element."); - if (!A_edge_target) FAIL("Required attribute `target' not set for `edge' element."); - LEAVE; STag_edge();pcdata = NULL; ENTER(E_edge); + if (!AX_graphxml_edge_source) FAIL("Required attribute `source' not set for `edge' element."); + if (!AX_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element."); + LEAVE; STag_graphxml_edge();graphxml_pcdata_ix = 0; ENTER(E_graphxml_edge); } "/>" { - if (!A_edge_source) FAIL("Required attribute `source' not set for `edge' element."); - if (!A_edge_target) FAIL("Required attribute `target' not set for `edge' element."); - LEAVE; STag_edge(); pcdata = NULL; ETag_edge(); + if (!AX_graphxml_edge_source) FAIL("Required attribute `source' not set for `edge' element."); + if (!AX_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element."); + LEAVE; STag_graphxml_edge(); graphxml_pcdata_ix = 0; ETag_graphxml_edge(); popbuffer(); /* attribute */ switch (YY_START) { - case S_graph_1: case S_graph_3: case S_graph_5: case S_graph_4: case S_graph: SET(S_graph_5); break; - case ROOT_edge: SET(EPILOG); break; + case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_5: case S_graphxml_graph_4: case S_graphxml_graph: SET(S_graphxml_graph_5); break; + case ROOT_graphxml_edge: SET(EPILOG); break; } } . FAIL("Unexpected character `%c' in attribute list of edge element.", yytext[0]); @@ -420,13 +529,14 @@ const char* *grahxml_statenames=NULL; <> FAIL("EOF in attribute list of `edge' element."); } -{ +{ "" { LEAVE; - ETag_edge(); + ETag_graphxml_edge(); + popbuffer(); /* attribute */ switch (YY_START) { - case S_graph_1: case S_graph_3: case S_graph_5: case S_graph_4: case S_graph: SET(S_graph_5); break; - case ROOT_edge: SET(EPILOG); break; + case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_5: case S_graphxml_graph_4: case S_graphxml_graph: SET(S_graphxml_graph_5); break; + case ROOT_graphxml_edge: SET(EPILOG); break; } } "" FAIL("Unexpected end-tag `%s': `' expected.",yytext); @@ -500,7 +610,7 @@ const char* *grahxml_statenames=NULL; %% /* Element context stack lookup. */ -int grahxml_element_context(int i) +int graphxml_element_context(int i) { return (0