Update of /cvsroot/flexml/flexml/testbed In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv869 Modified Files: Makefile Added Files: biparser-one.dtd biparser-one.in biparser-two.dtd biparser-two.in biparser.precious.c biparser.stdout.expected Log Message: A crude example of program having two parsers embeeded. It does not use action files, but directly define tag handling function (along with several other crudness I fail to solve right now) --- NEW FILE: biparser.precious.c --- #include <stdio.h> #include "biparser-one.h" #include "biparser-two.h" /* XML application entry points. Should be generated from two action files, but I wasn't succesfull in that area yet [Mt] */ void STag_one_foo(void) {} void ETag_one_foo(void) {printf("foo pcdata: %s\n", one_pcdata);} void STag_one_bar(void) {} void ETag_one_bar(void) {printf("bar pcdata: %s\n", one_pcdata);} void STag_two_toto(void) {} void ETag_two_toto(void) {printf("toto pcdata: %s\n", two_pcdata);} void STag_two_tutu(void) {} void ETag_two_tutu(void) {printf("tutu pcdata: %s\n", two_pcdata);} /* Parsers control. Should probably be added to the .h */ #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int one_lex (void); extern void one_restart (FILE *input_file ); extern void one__switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE one__create_buffer (FILE *file,int size ); extern void one__delete_buffer (YY_BUFFER_STATE b ); extern void one__flush_buffer (YY_BUFFER_STATE b ); extern void one_push_buffer_state (YY_BUFFER_STATE new_buffer ); extern void one_pop_buffer_state (void ); extern int two_lex (void); extern void two_restart (FILE *input_file ); extern void two__switch_to_buffer (YY_BUFFER_STATE new_buffer ); extern YY_BUFFER_STATE two__create_buffer (FILE *file,int size ); extern void two__delete_buffer (YY_BUFFER_STATE b ); extern void two__flush_buffer (YY_BUFFER_STATE b ); extern void two_push_buffer_state (YY_BUFFER_STATE new_buffer ); extern void two_pop_buffer_state (void ); int main(int argc, char **argv) { FILE *infile; YY_BUFFER_STATE buff; int retval; printf("Parse biparser-one.in\n"); infile=fopen("biparser-one.in","r"); buff=one__create_buffer(infile,10); one__switch_to_buffer(buff); retval = one_lex(); one__delete_buffer(buff); fclose(infile); printf("Parse biparser-two.in\n"); infile=fopen("biparser-two.in","r"); buff=two__create_buffer(infile,10); two__switch_to_buffer(buff); retval = two_lex() || retval; two__delete_buffer(buff); fclose(infile); return retval; } --- NEW FILE: biparser-one.in --- <!DOCTYPE foo SYSTEM "biparser-one.dtd"> <foo>012<bar>456789ab</bar>cdefghijklmn</foo> --- NEW FILE: biparser-two.dtd --- <!ELEMENT toto (#PCDATA|tutu)*> <!ELEMENT tutu (#PCDATA)> Index: Makefile =================================================================== RCS file: /cvsroot/flexml/flexml/testbed/Makefile,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- Makefile 29 Aug 2006 21:49:04 -0000 1.9 +++ Makefile 29 Aug 2006 23:25:13 -0000 1.10 @@ -39,7 +39,8 @@ # test definitions -- add new tests here ##################################################### -EXES = mixed1 mixed-enumatt mixed-enumatt2 mixed-stratt mixed-stratt-def multi-parser-run +EXES = mixed1 mixed-enumatt mixed-enumatt2 mixed-stratt mixed-stratt-def \ + multi-parser-run biparser INTERMEDIATES = $(EXES) $(EXES:%=%.c) $(EXES:%=%.l) UNIT_TESTS = \ @@ -48,7 +49,8 @@ test_mixed-enumatt2 \ test_mixed-stratt \ test_mixed-stratt-def \ - test_multi-parser-run + test_multi-parser-run \ + test_biparser test : $(UNIT_TESTS) @@ -76,6 +78,22 @@ test_multi-parser-run_cmd = ./multi-parser-run multi-parser-run.in test_multi-parser-run_deps = multi-parser-run multi-parser-run.in +# Test biparser (Have two parsers in the same code) +test_biparser_cmd = ./biparser biparser-one.in biparser-two.in +test_biparser_deps = biparser biparser-one.in biparser-two.in + +biparser: biparser-one.dtd biparser-two.dtd biparser.precious.c + for n in one two ; do \ + $(FLEXML) -P$$n -H biparser-$$n.h -L biparser-$$n.dtd; \ + $(FLEXML) -P$$n -S biparser-$$n.l -L biparser-$$n.dtd; \ + $(FLEX) -s -L -P$${n}_ -obiparser-$$n.c biparser-$$n.l; \ + done + $(CC) $(CFLAGS) -o biparser \ + biparser-one.c biparser-two.c \ + biparser.precious.c +CLEANFILES+= biparser-one.h biparser-one.l biparser-one.c \ + biparser-two.h biparser-two.l biparser-two.c + % : %.dtd %.act $(FLEXML) -b 1000 -A -a$@.act $@.dtd $(FLEX) -s -L -o$@.c $@.l @@ -96,7 +114,7 @@ ##################################################### clean : - rm -f $(TEST_INTERMEDIATES) $(INTERMEDIATES) + rm -f $(TEST_INTERMEDIATES) $(INTERMEDIATES) $(CLEANFILES) # When we are building test_foo, the variable $(TEST_BASE) is "foo" test_% : TEST_BASE = $(@:test_%=%) --- NEW FILE: biparser.stdout.expected --- Parse biparser-one.in bar pcdata: 456789ab foo pcdata: 012cdefghijklmn Parse biparser-two.in tutu pcdata: 456789ab toto pcdata: 012cdefghijklmn --- NEW FILE: biparser-two.in --- <!DOCTYPE toto SYSTEM "biparser-two.dtd"> <toto>012<tutu>456789ab</tutu>cdefghijklmn</toto> --- NEW FILE: biparser-one.dtd --- <!ELEMENT foo (#PCDATA|bar)*> <!ELEMENT bar (#PCDATA)> |