X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bc5f945db724984312da4c8d3905c1db7d168889..f3718ac873cc4a8e6426f7fe1b0c88f004837c1a:/src/xbt/graphxml.l diff --git a/src/xbt/graphxml.l b/src/xbt/graphxml.l index 194efb8abb..d51f92681e 100644 --- a/src/xbt/graphxml.l +++ b/src/xbt/graphxml.l @@ -1,9 +1,9 @@ -/* Validating XML processor for graphxml.dtd. - * Generated 2006/03/21 13:43:39. +/* Validating XML processor for src/xbt/graphxml.dtd. * * 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.47 2006/03/21 11:12:57 legranda 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.62 2007/10/11 10:00:14 mquinson Exp). * * There are two, intertwined parts to this program, part A and part B. * @@ -11,8 +11,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: @@ -48,33 +48,67 @@ /* Version strings. */ const char rcs_graphxml_flexml_skeleton[] = - "$" "Id: skel,v 1.28 2006/03/21 12:04:13 legranda Exp $"; + "$" "Id: skel,v 1.40 2007/10/11 09:57:24 mquinson Exp $"; const char rcs_graphxml_flexml[] = - "$" "Id: flexml.pl,v 1.47 2006/03/21 11:12:57 legranda Exp $"; + "$" "Id: flexml.pl,v 1.62 2007/10/11 10:00:14 mquinson Exp $"; /* ANSI headers. */ -#include +#include /* for realloc() -- needed here when using flex 2.5.4 */ #include #include #include #include #include + +#if defined(_XBT_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__TOS_WIN__) +# ifndef __STRICT_ANSI__ +# include +# include +# endif +#else +# include +#endif + +#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_graphxml_node_name A_graphxml_node_name; -AT_graphxml_edge_source A_graphxml_edge_source; -AT_graphxml_edge_isDirected A_graphxml_edge_isDirected; -AT_graphxml_edge_target A_graphxml_edge_target; -AT_graphxml_node_label A_graphxml_node_label; -AT_graphxml_edge_label A_graphxml_edge_label; -AT_graphxml_edge_name A_graphxml_edge_name; -AT_graphxml_edge_length A_graphxml_edge_length; +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 @@ -96,64 +130,98 @@ AT_graphxml_edge_length A_graphxml_edge_length; #define FAIL return fail static int fail(const char*, ...); -const char * graphxml_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. */ @@ -216,8 +284,27 @@ 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; + 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; @@ -288,16 +375,27 @@ const char* *graphxml_statenames=NULL; /* */ + /* isDirected (true|false) "true" + * > */ + +" is not allowed here."); + "{ + "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_graphxml_graph();pcdata = NULL; ENTER(S_graphxml_graph); + LEAVE; STag_graphxml_graph();graphxml_pcdata_ix = 0; ENTER(S_graphxml_graph); } "/>" { - LEAVE; STag_graphxml_graph(); pcdata = NULL; ETag_graphxml_graph(); + LEAVE; STag_graphxml_graph(); graphxml_pcdata_ix = 0; ETag_graphxml_graph(); popbuffer(); /* attribute */ switch (YY_START) { case ROOT_graphxml_graph: SET(EPILOG); break; } @@ -311,6 +409,7 @@ const char* *graphxml_statenames=NULL; "" { LEAVE; ETag_graphxml_graph(); + popbuffer(); /* attribute */ switch (YY_START) { case ROOT_graphxml_graph: SET(EPILOG); break; } @@ -322,28 +421,45 @@ const char* *graphxml_statenames=NULL; /* label CDATA "" * name CDATA #REQUIRED + * data CDATA "" + * position_x CDATA "-1.0" + * position_y CDATA "-1.0" * > */ +" is not allowed here."); + "{ - "label"{Eq}\' ENTER(VALUE1); BUFFERSET(A_graphxml_node_label); - "label"{Eq}\" ENTER(VALUE2); BUFFERSET(A_graphxml_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); - "name"{Eq}\' ENTER(VALUE1); BUFFERSET(A_graphxml_node_name); - "name"{Eq}\" ENTER(VALUE2); BUFFERSET(A_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); + + "position_y"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_node_position_y); + "position_y"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_node_position_y); ">" { - if (!A_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element."); - LEAVE; STag_graphxml_node();pcdata = NULL; ENTER(E_graphxml_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_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element."); - LEAVE; STag_graphxml_node(); pcdata = NULL; ETag_graphxml_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_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; @@ -358,6 +474,7 @@ const char* *graphxml_statenames=NULL; "" { LEAVE; ETag_graphxml_node(); + popbuffer(); /* attribute */ switch (YY_START) { 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; @@ -369,53 +486,53 @@ const char* *graphxml_statenames=NULL; } /* label CDATA "" - * name CDATA #IMPLIED - * source CDATA #REQUIRED - * target CDATA #REQUIRED - * length CDATA "0.0" - * isDirected (true|false) "true" + * name CDATA #IMPLIED + * source CDATA #REQUIRED + * target CDATA #REQUIRED + * length CDATA "-1.0" + * data CDATA "" * > */ +" is not allowed here."); + "{ - "label"{Eq}\' ENTER(VALUE1); BUFFERSET(A_graphxml_edge_label); - "label"{Eq}\" ENTER(VALUE2); BUFFERSET(A_graphxml_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_graphxml_edge_name); - "name"{Eq}\" ENTER(VALUE2); BUFFERSET(A_graphxml_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_graphxml_edge_source); - "source"{Eq}\" ENTER(VALUE2); BUFFERSET(A_graphxml_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_graphxml_edge_target); - "target"{Eq}\" ENTER(VALUE2); BUFFERSET(A_graphxml_edge_target); + "target"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_target); + "target"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_target); - "length"{Eq}\' ENTER(VALUE1); BUFFERSET(A_graphxml_edge_length); - "length"{Eq}\" ENTER(VALUE2); BUFFERSET(A_graphxml_edge_length); + "length"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_length); + "length"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_length); - "isDirected"{Eq}"'true'" | - "isDirected"{Eq}"\"true\"" A_graphxml_edge_isDirected = A_graphxml_edge_isDirected_true; - "isDirected"{Eq}"'false'" | - "isDirected"{Eq}"\"false\"" A_graphxml_edge_isDirected = A_graphxml_edge_isDirected_false; + "data"{Eq}\' ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_data); + "data"{Eq}\" ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_data); ">" { - if (!A_graphxml_edge_source) FAIL("Required attribute `source' not set for `edge' element."); - if (!A_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element."); - LEAVE; STag_graphxml_edge();pcdata = NULL; ENTER(E_graphxml_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_graphxml_edge_source) FAIL("Required attribute `source' not set for `edge' element."); - if (!A_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element."); - LEAVE; STag_graphxml_edge(); pcdata = NULL; ETag_graphxml_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_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; @@ -430,6 +547,7 @@ const char* *graphxml_statenames=NULL; "" { LEAVE; ETag_graphxml_edge(); + popbuffer(); /* attribute */ switch (YY_START) { 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; @@ -518,19 +636,39 @@ void print_yy_stack(char* fmt, ...) { int i = 0; va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); - for (i=1; i