diff options
| -rw-r--r-- | Makefile | 143 | ||||
| -rw-r--r-- | build.conf | 1 | ||||
| -rw-r--r-- | src/action.cpp | 9 | ||||
| -rw-r--r-- | src/action.h | 22 | ||||
| -rw-r--r-- | src/build.cpp | 9 | ||||
| -rw-r--r-- | src/build.h | 17 | ||||
| -rw-r--r-- | src/build.y | 71 | ||||
| -rw-r--r-- | src/builder.cpp | 98 | ||||
| -rw-r--r-- | src/builder.h | 25 | ||||
| -rw-r--r-- | src/function.cpp | 6 | ||||
| -rw-r--r-- | src/function.h | 6 | ||||
| -rw-r--r-- | src/functioncommandtolist.cpp | 5 | ||||
| -rw-r--r-- | src/functioncommandtolist.h | 2 | ||||
| -rw-r--r-- | src/functiondirectoriesin.cpp | 5 | ||||
| -rw-r--r-- | src/functiondirectoriesin.h | 2 | ||||
| -rw-r--r-- | src/functionfilesin.cpp | 5 | ||||
| -rw-r--r-- | src/functionfilesin.h | 2 | ||||
| -rw-r--r-- | src/functionregexp.cpp | 5 | ||||
| -rw-r--r-- | src/functionregexp.h | 2 | ||||
| -rw-r--r-- | src/functiontostring.cpp | 5 | ||||
| -rw-r--r-- | src/functiontostring.h | 2 | ||||
| -rw-r--r-- | src/main.cpp | 6 |
22 files changed, 389 insertions, 59 deletions
| @@ -1,54 +1,119 @@ | |||
| 1 | SRC:=$(wildcard src/*.cpp) | 1 | .PHONY: all clean parser-header lexer-header build-header |
| 2 | OBJS:=$(patsubst %.cpp,%.o,$(SRC)) | ||
| 3 | VER:=r$(shell svn info | grep "Revision" | cut -d\ -f2) | ||
| 4 | LIBS:=bu++ | ||
| 5 | LIBDIRS:=$(patsubst %,lib%,$(LIBS)) | ||
| 6 | LIBFILES:=$(foreach dir,$(LIBDIRS),$(dir)/$(dir).a) | ||
| 7 | DEPFILES:=$(patsubst %.o,%.d,$(OBJS)) | ||
| 8 | 2 | ||
| 9 | .PHONY: all clean dist checklibs | 3 | .SILENT: all clean parser-header src/build.tab.c src/build.tab.o parser lexer-header src/build.yy.c src/build.yy.o lexer build-header src/builder.o src/main.o src/perform.o src/performfactory.o src/functionregexp.o src/functioncommandtolist.o src/performcommand.o src/functionfilesin.o src/functionfactory.o src/function.o src/functiontostring.o src/viewer.o src/functiondirectoriesin.o build |
| 10 | 4 | ||
| 11 | all: checklibs src/version.h build | 5 | all: parser-header parser lexer-header lexer build-header build |
| 12 | 6 | ||
| 13 | checklibs: | 7 | parser-header: |
| 14 | for ldir in $(LIBDIRS); do make -C $$ldir; done | 8 | echo "--- parser ---" |
| 15 | 9 | ||
| 16 | -include $(DEPFILES) | 10 | src/build.tab.c: src/build.y |
| 11 | echo " comp: src/build.tab.c" | ||
| 12 | cd src; bison ../src/build.y; cd .. | ||
| 17 | 13 | ||
| 18 | src/version.h: .svn | 14 | src/build.tab.o: src/build.tab.c |
| 19 | echo "#define SVNREV \"$(VER)\"" > src/version.h | 15 | echo " comp: src/build.tab.o" |
| 16 | g++ -c src/build.tab.c -ggdb -Ilibbu++/src -Isrc -o src/build.tab.o | ||
| 20 | 17 | ||
| 21 | %.o: %.cpp %.d | 18 | parser: src/build.tab.o |
| 22 | g++ -ggdb $(CXXFLAGS) -Isrc $(patsubst %,-I%/src,$(LIBDIRS)) -c -o $@ $< | 19 | echo " stupid: parser" |
| 20 | |||
| 23 | 21 | ||
| 24 | clean: | 22 | lexer-header: |
| 25 | -rm $(foreach dir,src,$(wildcard $(dir)/*.o)) build src/version.h | 23 | echo |
| 24 | echo "--- lexer ---" | ||
| 25 | |||
| 26 | src/build.yy.c: src/build.l | ||
| 27 | echo " comp: src/build.yy.c" | ||
| 28 | flex --bison-bridge --bison-locations -o src/build.yy.c src/build.l | ||
| 29 | |||
| 30 | src/build.yy.o: src/build.yy.c | ||
| 31 | echo " comp: src/build.yy.o" | ||
| 32 | g++ -c src/build.yy.c -ggdb -Ilibbu++/src -Isrc -o src/build.yy.o | ||
| 33 | |||
| 34 | lexer: src/build.yy.o | ||
| 35 | echo " stupid: lexer" | ||
| 36 | |||
| 37 | |||
| 38 | build-header: | ||
| 39 | echo | ||
| 40 | echo "--- build ---" | ||
| 41 | |||
| 42 | src/builder.o: src/builder.cpp | ||
| 43 | echo " comp: src/builder.o" | ||
| 44 | g++ -c src/builder.cpp -ggdb -Ilibbu++/src -Isrc -o src/builder.o | ||
| 45 | |||
| 46 | src/main.o: src/main.cpp | ||
| 47 | echo " comp: src/main.o" | ||
| 48 | g++ -c src/main.cpp -ggdb -Ilibbu++/src -Isrc -o src/main.o | ||
| 26 | 49 | ||
| 27 | depclean: | 50 | src/perform.o: src/perform.cpp |
| 28 | -rm $(foreach dir,src src/lib $(TOOLDIRS),$(wildcard $(dir)/*.d)) | 51 | echo " comp: src/perform.o" |
| 52 | g++ -c src/perform.cpp -ggdb -Ilibbu++/src -Isrc -o src/perform.o | ||
| 29 | 53 | ||
| 30 | %.d: %.cpp | 54 | src/performfactory.o: src/performfactory.cpp |
| 31 | g++ -Isrc -Isrc/lib $(CXXFLAGS) $(patsubst %,-I%/src,$(LIBDIRS)) -M $(CPPFLAGS) $< | sed 's,\($(patsubst src/%,%,$*)\)\.o[:]*,src/\1.o $@:,g' > $@ | 55 | echo " comp: src/performfactory.o" |
| 56 | g++ -c src/performfactory.cpp -ggdb -Ilibbu++/src -Isrc -o src/performfactory.o | ||
| 32 | 57 | ||
| 33 | $(LIBFILES): | 58 | src/functionregexp.o: src/functionregexp.cpp |
| 34 | make -C $(dir $@) $(notdir $@) | 59 | echo " comp: src/functionregexp.o" |
| 60 | g++ -c src/functionregexp.cpp -ggdb -Ilibbu++/src -Isrc -o src/functionregexp.o | ||
| 35 | 61 | ||
| 36 | test: | 62 | src/functioncommandtolist.o: src/functioncommandtolist.cpp |
| 37 | -build | 63 | echo " comp: src/functioncommandtolist.o" |
| 64 | g++ -c src/functioncommandtolist.cpp -ggdb -Ilibbu++/src -Isrc -o src/functioncommandtolist.o | ||
| 38 | 65 | ||
| 39 | build: $(LIBFILES) $(OBJS) | 66 | src/performcommand.o: src/performcommand.cpp |
| 40 | g++ -ggdb $(OBJS) -o build $(patsubst %,-L%,$(LIBDIRS)) $(patsubst %,-l%,$(LIBS)) | 67 | echo " comp: src/performcommand.o" |
| 68 | g++ -c src/performcommand.cpp -ggdb -Ilibbu++/src -Isrc -o src/performcommand.o | ||
| 41 | 69 | ||
| 42 | api: $(LIBSRC) $(TOOLSRC) | 70 | src/functionfilesin.o: src/functionfilesin.cpp |
| 43 | sed 's/PROJECT_NUMBER.*/PROJECT_NUMBER = $(VER)/' < Doxyfile > Doxyfile.tmp | 71 | echo " comp: src/functionfilesin.o" |
| 44 | doxygen Doxyfile.tmp | 72 | g++ -c src/functionfilesin.cpp -ggdb -Ilibbu++/src -Isrc -o src/functionfilesin.o |
| 45 | rm Doxyfile.tmp | ||
| 46 | make -C api/latex | ||
| 47 | 73 | ||
| 48 | dist: clean src/version.h | 74 | src/functionfactory.o: src/functionfactory.cpp |
| 49 | mkdir build-$(VER) | 75 | echo " comp: src/functionfactory.o" |
| 50 | cp -a --target-directory=build-$(VER) Makefile src | 76 | g++ -c src/functionfactory.cpp -ggdb -Ilibbu++/src -Isrc -o src/functionfactory.o |
| 51 | tar --exclude=\.svn -c build-$(VER) | bzip2 -9 > build-$(VER).tar.bz2 | 77 | |
| 52 | rm -Rf build-$(VER) | 78 | src/function.o: src/function.cpp |
| 53 | -for dir in $(LIBDIRS); do make -C $$dir dist; done | 79 | echo " comp: src/function.o" |
| 80 | g++ -c src/function.cpp -ggdb -Ilibbu++/src -Isrc -o src/function.o | ||
| 81 | |||
| 82 | src/functiontostring.o: src/functiontostring.cpp | ||
| 83 | echo " comp: src/functiontostring.o" | ||
| 84 | g++ -c src/functiontostring.cpp -ggdb -Ilibbu++/src -Isrc -o src/functiontostring.o | ||
| 85 | |||
| 86 | src/viewer.o: src/viewer.cpp | ||
| 87 | echo " comp: src/viewer.o" | ||
| 88 | g++ -c src/viewer.cpp -ggdb -Ilibbu++/src -Isrc -o src/viewer.o | ||
| 89 | |||
| 90 | src/functiondirectoriesin.o: src/functiondirectoriesin.cpp | ||
| 91 | echo " comp: src/functiondirectoriesin.o" | ||
| 92 | g++ -c src/functiondirectoriesin.cpp -ggdb -Ilibbu++/src -Isrc -o src/functiondirectoriesin.o | ||
| 93 | |||
| 94 | build: src/functionfactory.o src/functiontostring.o src/perform.o src/functiondirectoriesin.o src/viewer.o src/main.o src/performcommand.o src/functionregexp.o src/builder.o src/build.yy.o src/functionfilesin.o src/function.o src/performfactory.o src/functioncommandtolist.o src/build.tab.o | ||
| 95 | echo " exe: build" | ||
| 96 | g++ src/functionfactory.o src/functiontostring.o src/perform.o src/functiondirectoriesin.o src/viewer.o src/main.o src/performcommand.o src/functionregexp.o src/builder.o src/build.yy.o src/functionfilesin.o src/function.o src/performfactory.o src/functioncommandtolist.o src/build.tab.o -Llibbu++ -lbu++ -ldl -o build | ||
| 97 | |||
| 98 | clean: | ||
| 99 | -if [ -f src/build.tab.c ] ; then echo " rm: src/build.tab.c" ; rm src/build.tab.c ; fi | ||
| 100 | -if [ -f src/build.tab.o ] ; then echo " rm: src/build.tab.o" ; rm src/build.tab.o ; fi | ||
| 101 | -if [ -f parser ] ; then echo " rm: parser" ; rm parser ; fi | ||
| 102 | -if [ -f src/build.yy.c ] ; then echo " rm: src/build.yy.c" ; rm src/build.yy.c ; fi | ||
| 103 | -if [ -f src/build.yy.o ] ; then echo " rm: src/build.yy.o" ; rm src/build.yy.o ; fi | ||
| 104 | -if [ -f lexer ] ; then echo " rm: lexer" ; rm lexer ; fi | ||
| 105 | -if [ -f src/builder.o ] ; then echo " rm: src/builder.o" ; rm src/builder.o ; fi | ||
| 106 | -if [ -f src/main.o ] ; then echo " rm: src/main.o" ; rm src/main.o ; fi | ||
| 107 | -if [ -f src/perform.o ] ; then echo " rm: src/perform.o" ; rm src/perform.o ; fi | ||
| 108 | -if [ -f src/performfactory.o ] ; then echo " rm: src/performfactory.o" ; rm src/performfactory.o ; fi | ||
| 109 | -if [ -f src/functionregexp.o ] ; then echo " rm: src/functionregexp.o" ; rm src/functionregexp.o ; fi | ||
| 110 | -if [ -f src/functioncommandtolist.o ] ; then echo " rm: src/functioncommandtolist.o" ; rm src/functioncommandtolist.o ; fi | ||
| 111 | -if [ -f src/performcommand.o ] ; then echo " rm: src/performcommand.o" ; rm src/performcommand.o ; fi | ||
| 112 | -if [ -f src/functionfilesin.o ] ; then echo " rm: src/functionfilesin.o" ; rm src/functionfilesin.o ; fi | ||
| 113 | -if [ -f src/functionfactory.o ] ; then echo " rm: src/functionfactory.o" ; rm src/functionfactory.o ; fi | ||
| 114 | -if [ -f src/function.o ] ; then echo " rm: src/function.o" ; rm src/function.o ; fi | ||
| 115 | -if [ -f src/functiontostring.o ] ; then echo " rm: src/functiontostring.o" ; rm src/functiontostring.o ; fi | ||
| 116 | -if [ -f src/viewer.o ] ; then echo " rm: src/viewer.o" ; rm src/viewer.o ; fi | ||
| 117 | -if [ -f src/functiondirectoriesin.o ] ; then echo " rm: src/functiondirectoriesin.o" ; rm src/functiondirectoriesin.o ; fi | ||
| 118 | -if [ -f build ] ; then echo " rm: build" ; rm build ; fi | ||
| 54 | 119 | ||
| @@ -1,6 +1,7 @@ | |||
| 1 | # build.conf for build, kind of whacky, eh? | 1 | # build.conf for build, kind of whacky, eh? |
| 2 | 2 | ||
| 3 | default action: check "build", check "cleanup" | 3 | default action: check "build", check "cleanup" |
| 4 | "clean" action: clean ["build", "cleanup"] | ||
| 4 | 5 | ||
| 5 | set "CXXFLAGS" += "-ggdb" | 6 | set "CXXFLAGS" += "-ggdb" |
| 6 | 7 | ||
diff --git a/src/action.cpp b/src/action.cpp new file mode 100644 index 0000000..cdf50e8 --- /dev/null +++ b/src/action.cpp | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #include "action.h" | ||
| 2 | |||
| 3 | Action::Action() | ||
| 4 | { | ||
| 5 | } | ||
| 6 | |||
| 7 | Action::~Action() | ||
| 8 | { | ||
| 9 | } | ||
diff --git a/src/action.h b/src/action.h new file mode 100644 index 0000000..4ec3b4a --- /dev/null +++ b/src/action.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | #ifndef ACTION_H | ||
| 2 | #define ACTION_H | ||
| 3 | |||
| 4 | #include <stdint.h> | ||
| 5 | |||
| 6 | class Action | ||
| 7 | { | ||
| 8 | public: | ||
| 9 | enum eAction | ||
| 10 | { | ||
| 11 | actCheck, | ||
| 12 | actClean | ||
| 13 | }; | ||
| 14 | public: | ||
| 15 | Action(); | ||
| 16 | virtual ~Action(); | ||
| 17 | |||
| 18 | private: | ||
| 19 | |||
| 20 | }; | ||
| 21 | |||
| 22 | #endif | ||
diff --git a/src/build.cpp b/src/build.cpp new file mode 100644 index 0000000..d3bd960 --- /dev/null +++ b/src/build.cpp | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #include "build.h" | ||
| 2 | |||
| 3 | Build::Build() | ||
| 4 | { | ||
| 5 | } | ||
| 6 | |||
| 7 | Build::~Build() | ||
| 8 | { | ||
| 9 | } | ||
diff --git a/src/build.h b/src/build.h new file mode 100644 index 0000000..a2bf3ed --- /dev/null +++ b/src/build.h | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | #ifndef BUILD_H | ||
| 2 | #define BUILD_H | ||
| 3 | |||
| 4 | #include <stdint.h> | ||
| 5 | |||
| 6 | |||
| 7 | class Build | ||
| 8 | { | ||
| 9 | public: | ||
| 10 | Build(); | ||
| 11 | virtual ~Build(); | ||
| 12 | |||
| 13 | private: | ||
| 14 | |||
| 15 | }; | ||
| 16 | |||
| 17 | #endif | ||
diff --git a/src/build.y b/src/build.y index 1424867..40f8d34 100644 --- a/src/build.y +++ b/src/build.y | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | # include <string> | 3 | # include <string> |
| 4 | # include "builder.h" | 4 | # include "builder.h" |
| 5 | # include "build.tab.h" | 5 | # include "build.tab.h" |
| 6 | # include "action.h" | ||
| 6 | void yyerror( YYLTYPE *locp, Builder &bld, char const *msg ); | 7 | void yyerror( YYLTYPE *locp, Builder &bld, char const *msg ); |
| 7 | %} | 8 | %} |
| 8 | 9 | ||
| @@ -69,21 +70,37 @@ rulecmd: TOK_MATCHES { printf(" Matches: " ); } func { printf("\n"); } | |||
| 69 | ; | 70 | ; |
| 70 | 71 | ||
| 71 | // Action interpretation | 72 | // Action interpretation |
| 72 | action: TOK_DEFAULT TOK_ACTION ':' { printf("Default action:\n"); } actioncmds | 73 | action: TOK_DEFAULT TOK_ACTION ':' |
| 73 | | STRING TOK_ACTION ':' { printf("\"%s\" action:\n", $1 ); } actioncmds | 74 | { |
| 75 | bld.addAction(); | ||
| 76 | } | ||
| 77 | actioncmds | ||
| 78 | | STRING TOK_ACTION ':' | ||
| 79 | { | ||
| 80 | if( $1[0] == '\0' ) | ||
| 81 | bld.error( | ||
| 82 | &yylloc, | ||
| 83 | "You cannot use an empty string as the name of an action." | ||
| 84 | ); | ||
| 85 | bld.addAction( $1 ); | ||
| 86 | } | ||
| 87 | actioncmds | ||
| 74 | ; | 88 | ; |
| 75 | 89 | ||
| 76 | actioncmds: actioncmd | 90 | actioncmds: actioncmd |
| 77 | | actioncmds ',' actioncmd | 91 | | actioncmds ',' actioncmd |
| 78 | ; | 92 | ; |
| 79 | 93 | ||
| 80 | actioncmd: { printf(" "); } actioncmdtype list {printf("\n");} | 94 | actioncmd: TOK_CHECK list |
| 95 | { | ||
| 96 | bld.addCommand( Action::actCheck ); | ||
| 97 | } | ||
| 98 | | TOK_CLEAN list | ||
| 99 | { | ||
| 100 | bld.addCommand( Action::actClean ); | ||
| 101 | } | ||
| 81 | ; | 102 | ; |
| 82 | 103 | ||
| 83 | actioncmdtype: TOK_CHECK { printf("check "); } | ||
| 84 | | TOK_CLEAN { printf("clean "); } | ||
| 85 | ; | ||
| 86 | |||
| 87 | // Target interpretation | 104 | // Target interpretation |
| 88 | target: list ':' { printf(" are targets:\n"); } targetcmds | 105 | target: list ':' { printf(" are targets:\n"); } targetcmds |
| 89 | ; | 106 | ; |
| @@ -114,8 +131,12 @@ setwhat: STRING '=' STRING { printf("%s = %s\n", $1, $3 ); } | |||
| 114 | ; | 131 | ; |
| 115 | 132 | ||
| 116 | // list goo | 133 | // list goo |
| 117 | list: listitem listfilter | 134 | list: singlelistitem listfilter |
| 118 | | '[' { printf("["); } listitems ']' { printf("]"); } listfilter | 135 | | '[' |
| 136 | { | ||
| 137 | bld.newList(); | ||
| 138 | } | ||
| 139 | listitems ']' listfilter | ||
| 119 | ; | 140 | ; |
| 120 | 141 | ||
| 121 | listfilter: | 142 | listfilter: |
| @@ -123,20 +144,42 @@ listfilter: | |||
| 123 | ; | 144 | ; |
| 124 | 145 | ||
| 125 | listitems: listitem | 146 | listitems: listitem |
| 126 | | listitems ',' { printf(", "); } listitem | 147 | | listitems ',' listitem |
| 127 | ; | 148 | ; |
| 128 | 149 | ||
| 129 | listitem: STRING { printf("%s", $1 ); } | 150 | listitem: STRING |
| 151 | { | ||
| 152 | bld.addListString( $1 ); | ||
| 153 | } | ||
| 130 | | func | 154 | | func |
| 155 | { | ||
| 156 | bld.addListFunc(); | ||
| 157 | } | ||
| 131 | ; | 158 | ; |
| 132 | 159 | ||
| 160 | singlelistitem: STRING | ||
| 161 | { | ||
| 162 | bld.newList(); | ||
| 163 | bld.addListString( $1 ); | ||
| 164 | } | ||
| 165 | | func | ||
| 166 | { | ||
| 167 | bld.newList(); | ||
| 168 | bld.addListFunc(); | ||
| 169 | } | ||
| 170 | ; | ||
| 171 | |||
| 133 | // Function | 172 | // Function |
| 134 | func: FUNCTION { printf("%s(", $1 ); } '(' funcparams ')' { printf(")"); } | 173 | func: FUNCTION |
| 174 | { | ||
| 175 | bld.newFunctionCall( $1 ); | ||
| 176 | } | ||
| 177 | '(' funcparams ')' | ||
| 135 | ; | 178 | ; |
| 136 | 179 | ||
| 137 | funcparams: | 180 | funcparams: |
| 138 | | STRING { printf("%s", $1 ); } | 181 | | STRING { bld.addFunctionParam( $1 ); } |
| 139 | | funcparams ',' STRING { printf(", %s", $3 ); } | 182 | | funcparams ',' STRING { bld.addFunctionParam( $3 ); } |
| 140 | ; | 183 | ; |
| 141 | 184 | ||
| 142 | // Perform | 185 | // Perform |
diff --git a/src/builder.cpp b/src/builder.cpp index e8cd6e2..70be725 100644 --- a/src/builder.cpp +++ b/src/builder.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #include "functionfactory.h" | 2 | #include "functionfactory.h" |
| 3 | #include "performfactory.h" | 3 | #include "performfactory.h" |
| 4 | #include "targetfactory.h" | 4 | #include "targetfactory.h" |
| 5 | #include "action.h" | ||
| 5 | 6 | ||
| 6 | subExceptionDef( BuildException ); | 7 | subExceptionDef( BuildException ); |
| 7 | 8 | ||
| @@ -62,11 +63,46 @@ bool Builder::isFunction( const char *sFunc ) | |||
| 62 | 63 | ||
| 63 | void Builder::newFunctionCall( const char *sName ) | 64 | void Builder::newFunctionCall( const char *sName ) |
| 64 | { | 65 | { |
| 65 | 66 | pTmpFunc = fFunction.instantiate( sName ); | |
| 66 | } | 67 | } |
| 67 | 68 | ||
| 68 | void Builder::addFunctionParam( const char *sParam ) | 69 | void Builder::addFunctionParam( const char *sParam ) |
| 69 | { | 70 | { |
| 71 | pTmpFunc->addParam( sParam ); | ||
| 72 | } | ||
| 73 | |||
| 74 | void Builder::newList() | ||
| 75 | { | ||
| 76 | lTmp.clear(); | ||
| 77 | } | ||
| 78 | |||
| 79 | void Builder::addListString( const char *str ) | ||
| 80 | { | ||
| 81 | lTmp.push_back( BuildListItem(str, NULL) ); | ||
| 82 | } | ||
| 83 | |||
| 84 | void Builder::addListFunc() | ||
| 85 | { | ||
| 86 | lTmp.push_back( BuildListItem("", pTmpFunc ) ); | ||
| 87 | } | ||
| 88 | |||
| 89 | StringList Builder::buildToStringList( Builder::BuildList &lSrc, StringList &lIn ) | ||
| 90 | { | ||
| 91 | StringList lOut; | ||
| 92 | |||
| 93 | for( BuildList::iterator i = lSrc.begin(); i != lSrc.end(); i++ ) | ||
| 94 | { | ||
| 95 | if( (*i).second ) | ||
| 96 | { | ||
| 97 | (*i).second->execute( lIn, lOut ); | ||
| 98 | } | ||
| 99 | else | ||
| 100 | { | ||
| 101 | lOut.push_back( (*i).first ); | ||
| 102 | } | ||
| 103 | } | ||
| 104 | |||
| 105 | return lOut; | ||
| 70 | } | 106 | } |
| 71 | 107 | ||
| 72 | // | 108 | // |
| @@ -85,3 +121,63 @@ void Builder::addPerformParam( const char *sParam ) | |||
| 85 | { | 121 | { |
| 86 | } | 122 | } |
| 87 | 123 | ||
| 124 | // | ||
| 125 | // Functions for dealing with actions | ||
| 126 | // | ||
| 127 | void Builder::addAction() | ||
| 128 | { | ||
| 129 | lActions.push_back( ActionTmp("", ActionTmpCmdList()) ); | ||
| 130 | } | ||
| 131 | |||
| 132 | void Builder::addAction( const char *sName ) | ||
| 133 | { | ||
| 134 | lActions.push_back( ActionTmp(sName, ActionTmpCmdList()) ); | ||
| 135 | } | ||
| 136 | |||
| 137 | void Builder::addCommand( int nType ) | ||
| 138 | { | ||
| 139 | lActions.back().second.push_back( ActionTmpCmd( nType, lTmp ) ); | ||
| 140 | } | ||
| 141 | |||
| 142 | // | ||
| 143 | // Debug | ||
| 144 | // | ||
| 145 | void Builder::debugDump() | ||
| 146 | { | ||
| 147 | printf("Actions:\n"); | ||
| 148 | for( ActionTmpList::iterator i = lActions.begin(); | ||
| 149 | i != lActions.end(); i++ ) | ||
| 150 | { | ||
| 151 | if( (*i).first == "" ) | ||
| 152 | { | ||
| 153 | printf(" default:\n"); | ||
| 154 | } | ||
| 155 | else | ||
| 156 | { | ||
| 157 | printf(" \"%s\":\n", (*i).first.c_str() ); | ||
| 158 | } | ||
| 159 | for( ActionTmpCmdList::iterator j = (*i).second.begin(); | ||
| 160 | j != (*i).second.end(); j++ ) | ||
| 161 | { | ||
| 162 | printf(" %d [", (*j).first ); | ||
| 163 | for( BuildList::iterator k = (*j).second.begin(); | ||
| 164 | k != (*j).second.end(); k++ ) | ||
| 165 | { | ||
| 166 | if( k != (*j).second.begin() ) | ||
| 167 | { | ||
| 168 | printf(", "); | ||
| 169 | } | ||
| 170 | if( (*k).second ) | ||
| 171 | { | ||
| 172 | printf("func()"); | ||
| 173 | } | ||
| 174 | else | ||
| 175 | { | ||
| 176 | printf("\"%s\"", (*k).first.c_str() ); | ||
| 177 | } | ||
| 178 | } | ||
| 179 | printf("]\n"); | ||
| 180 | } | ||
| 181 | } | ||
| 182 | } | ||
| 183 | |||
diff --git a/src/builder.h b/src/builder.h index a6f88f4..1d126dc 100644 --- a/src/builder.h +++ b/src/builder.h | |||
| @@ -3,6 +3,8 @@ | |||
| 3 | 3 | ||
| 4 | #include <stdint.h> | 4 | #include <stdint.h> |
| 5 | #include <string> | 5 | #include <string> |
| 6 | #include <list> | ||
| 7 | #include <utility> | ||
| 6 | #include "build.tab.h" | 8 | #include "build.tab.h" |
| 7 | #include "exceptions.h" | 9 | #include "exceptions.h" |
| 8 | 10 | ||
| @@ -19,6 +21,8 @@ YY_DECL; | |||
| 19 | 21 | ||
| 20 | subExceptionDecl( BuildException ); | 22 | subExceptionDecl( BuildException ); |
| 21 | 23 | ||
| 24 | typedef std::list<std::string> StringList; | ||
| 25 | |||
| 22 | class Builder | 26 | class Builder |
| 23 | { | 27 | { |
| 24 | public: | 28 | public: |
| @@ -30,7 +34,6 @@ public: | |||
| 30 | 34 | ||
| 31 | void load( const std::string &sFile ); | 35 | void load( const std::string &sFile ); |
| 32 | 36 | ||
| 33 | |||
| 34 | private: | 37 | private: |
| 35 | std::string file; | 38 | std::string file; |
| 36 | void scanBegin(); | 39 | void scanBegin(); |
| @@ -66,10 +69,30 @@ public: // List functions | |||
| 66 | void addListString( const char *str ); | 69 | void addListString( const char *str ); |
| 67 | void addListFunc(); | 70 | void addListFunc(); |
| 68 | 71 | ||
| 72 | typedef std::pair<std::string, Function *> BuildListItem; | ||
| 73 | typedef std::list<BuildListItem> BuildList; | ||
| 74 | |||
| 75 | StringList buildToStringList( BuildList &lSrc, StringList &lIn ); | ||
| 76 | |||
| 77 | private: | ||
| 78 | BuildList lTmp; | ||
| 79 | |||
| 69 | public: // Functions for dealing with rules | 80 | public: // Functions for dealing with rules |
| 81 | |||
| 82 | public: // Functions for dealing with actions | ||
| 70 | void addAction(); | 83 | void addAction(); |
| 71 | void addAction( const char *sName ); | 84 | void addAction( const char *sName ); |
| 72 | void addCommand( int nType ); | 85 | void addCommand( int nType ); |
| 86 | |||
| 87 | private: // Action variables | ||
| 88 | typedef std::pair<int, BuildList> ActionTmpCmd; | ||
| 89 | typedef std::list<ActionTmpCmd> ActionTmpCmdList; | ||
| 90 | typedef std::pair<std::string, ActionTmpCmdList> ActionTmp; | ||
| 91 | typedef std::list<ActionTmp> ActionTmpList; | ||
| 92 | ActionTmpList lActions; | ||
| 93 | |||
| 94 | public: // Debug | ||
| 95 | void debugDump(); | ||
| 73 | }; | 96 | }; |
| 74 | 97 | ||
| 75 | #endif | 98 | #endif |
diff --git a/src/function.cpp b/src/function.cpp index 5eeac97..e7554e1 100644 --- a/src/function.cpp +++ b/src/function.cpp | |||
| @@ -7,3 +7,9 @@ Function::Function() | |||
| 7 | Function::~Function() | 7 | Function::~Function() |
| 8 | { | 8 | { |
| 9 | } | 9 | } |
| 10 | |||
| 11 | void Function::addParam( const char *str ) | ||
| 12 | { | ||
| 13 | lParams.push_back( str ); | ||
| 14 | } | ||
| 15 | |||
diff --git a/src/function.h b/src/function.h index 44a894d..c840922 100644 --- a/src/function.h +++ b/src/function.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | #define FUNCTION_H | 2 | #define FUNCTION_H |
| 3 | 3 | ||
| 4 | #include <stdint.h> | 4 | #include <stdint.h> |
| 5 | 5 | #include "builder.h" | |
| 6 | 6 | ||
| 7 | class Function | 7 | class Function |
| 8 | { | 8 | { |
| @@ -10,7 +10,11 @@ public: | |||
| 10 | Function(); | 10 | Function(); |
| 11 | virtual ~Function(); | 11 | virtual ~Function(); |
| 12 | 12 | ||
| 13 | void addParam( const char *str ); | ||
| 14 | virtual void execute( StringList &lInput, StringList &lOutput )=0; | ||
| 15 | |||
| 13 | private: | 16 | private: |
| 17 | StringList lParams; | ||
| 14 | 18 | ||
| 15 | }; | 19 | }; |
| 16 | 20 | ||
diff --git a/src/functioncommandtolist.cpp b/src/functioncommandtolist.cpp index 8d18870..6299f6f 100644 --- a/src/functioncommandtolist.cpp +++ b/src/functioncommandtolist.cpp | |||
| @@ -10,3 +10,8 @@ FunctionCommandToList::FunctionCommandToList() | |||
| 10 | FunctionCommandToList::~FunctionCommandToList() | 10 | FunctionCommandToList::~FunctionCommandToList() |
| 11 | { | 11 | { |
| 12 | } | 12 | } |
| 13 | |||
| 14 | void FunctionCommandToList::execute( StringList &lInput, StringList &lOutput ) | ||
| 15 | { | ||
| 16 | } | ||
| 17 | |||
diff --git a/src/functioncommandtolist.h b/src/functioncommandtolist.h index 90b4bf3..5bebe16 100644 --- a/src/functioncommandtolist.h +++ b/src/functioncommandtolist.h | |||
| @@ -10,6 +10,8 @@ class FunctionCommandToList : public Function | |||
| 10 | public: | 10 | public: |
| 11 | FunctionCommandToList(); | 11 | FunctionCommandToList(); |
| 12 | virtual ~FunctionCommandToList(); | 12 | virtual ~FunctionCommandToList(); |
| 13 | |||
| 14 | virtual void execute( StringList &lInput, StringList &lOutput ); | ||
| 13 | 15 | ||
| 14 | private: | 16 | private: |
| 15 | 17 | ||
diff --git a/src/functiondirectoriesin.cpp b/src/functiondirectoriesin.cpp index f847e13..a22e5d7 100644 --- a/src/functiondirectoriesin.cpp +++ b/src/functiondirectoriesin.cpp | |||
| @@ -10,3 +10,8 @@ FunctionDirectoriesIn::FunctionDirectoriesIn() | |||
| 10 | FunctionDirectoriesIn::~FunctionDirectoriesIn() | 10 | FunctionDirectoriesIn::~FunctionDirectoriesIn() |
| 11 | { | 11 | { |
| 12 | } | 12 | } |
| 13 | |||
| 14 | void FunctionDirectoriesIn::execute( StringList &lInput, StringList &lOutput ) | ||
| 15 | { | ||
| 16 | } | ||
| 17 | |||
diff --git a/src/functiondirectoriesin.h b/src/functiondirectoriesin.h index 5f6ee42..d769a0d 100644 --- a/src/functiondirectoriesin.h +++ b/src/functiondirectoriesin.h | |||
| @@ -10,6 +10,8 @@ class FunctionDirectoriesIn : public Function | |||
| 10 | public: | 10 | public: |
| 11 | FunctionDirectoriesIn(); | 11 | FunctionDirectoriesIn(); |
| 12 | virtual ~FunctionDirectoriesIn(); | 12 | virtual ~FunctionDirectoriesIn(); |
| 13 | |||
| 14 | virtual void execute( StringList &lInput, StringList &lOutput ); | ||
| 13 | 15 | ||
| 14 | private: | 16 | private: |
| 15 | 17 | ||
diff --git a/src/functionfilesin.cpp b/src/functionfilesin.cpp index 3a9d163..7dc073b 100644 --- a/src/functionfilesin.cpp +++ b/src/functionfilesin.cpp | |||
| @@ -10,3 +10,8 @@ FunctionFilesIn::FunctionFilesIn() | |||
| 10 | FunctionFilesIn::~FunctionFilesIn() | 10 | FunctionFilesIn::~FunctionFilesIn() |
| 11 | { | 11 | { |
| 12 | } | 12 | } |
| 13 | |||
| 14 | void FunctionFilesIn::execute( StringList &lInput, StringList &lOutput ) | ||
| 15 | { | ||
| 16 | } | ||
| 17 | |||
diff --git a/src/functionfilesin.h b/src/functionfilesin.h index 070f508..2ad23f9 100644 --- a/src/functionfilesin.h +++ b/src/functionfilesin.h | |||
| @@ -10,6 +10,8 @@ class FunctionFilesIn : public Function | |||
| 10 | public: | 10 | public: |
| 11 | FunctionFilesIn(); | 11 | FunctionFilesIn(); |
| 12 | virtual ~FunctionFilesIn(); | 12 | virtual ~FunctionFilesIn(); |
| 13 | |||
| 14 | virtual void execute( StringList &lInput, StringList &lOutput ); | ||
| 13 | 15 | ||
| 14 | private: | 16 | private: |
| 15 | 17 | ||
diff --git a/src/functionregexp.cpp b/src/functionregexp.cpp index fd632ae..045f745 100644 --- a/src/functionregexp.cpp +++ b/src/functionregexp.cpp | |||
| @@ -10,3 +10,8 @@ FunctionRegexp::FunctionRegexp() | |||
| 10 | FunctionRegexp::~FunctionRegexp() | 10 | FunctionRegexp::~FunctionRegexp() |
| 11 | { | 11 | { |
| 12 | } | 12 | } |
| 13 | |||
| 14 | void FunctionRegexp::execute( StringList &lInput, StringList &lOutput ) | ||
| 15 | { | ||
| 16 | } | ||
| 17 | |||
diff --git a/src/functionregexp.h b/src/functionregexp.h index 0adaf97..80a8220 100644 --- a/src/functionregexp.h +++ b/src/functionregexp.h | |||
| @@ -10,6 +10,8 @@ class FunctionRegexp : public Function | |||
| 10 | public: | 10 | public: |
| 11 | FunctionRegexp(); | 11 | FunctionRegexp(); |
| 12 | virtual ~FunctionRegexp(); | 12 | virtual ~FunctionRegexp(); |
| 13 | |||
| 14 | virtual void execute( StringList &lInput, StringList &lOutput ); | ||
| 13 | 15 | ||
| 14 | private: | 16 | private: |
| 15 | 17 | ||
diff --git a/src/functiontostring.cpp b/src/functiontostring.cpp index 93a8b56..f5f43b2 100644 --- a/src/functiontostring.cpp +++ b/src/functiontostring.cpp | |||
| @@ -10,3 +10,8 @@ FunctionToString::FunctionToString() | |||
| 10 | FunctionToString::~FunctionToString() | 10 | FunctionToString::~FunctionToString() |
| 11 | { | 11 | { |
| 12 | } | 12 | } |
| 13 | |||
| 14 | void FunctionToString::execute( StringList &lInput, StringList &lOutput ) | ||
| 15 | { | ||
| 16 | } | ||
| 17 | |||
diff --git a/src/functiontostring.h b/src/functiontostring.h index 08baadd..93bc20f 100644 --- a/src/functiontostring.h +++ b/src/functiontostring.h | |||
| @@ -10,6 +10,8 @@ class FunctionToString : public Function | |||
| 10 | public: | 10 | public: |
| 11 | FunctionToString(); | 11 | FunctionToString(); |
| 12 | virtual ~FunctionToString(); | 12 | virtual ~FunctionToString(); |
| 13 | |||
| 14 | virtual void execute( StringList &lInput, StringList &lOutput ); | ||
| 13 | 15 | ||
| 14 | private: | 16 | private: |
| 15 | 17 | ||
diff --git a/src/main.cpp b/src/main.cpp index 9168df7..97c2708 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
| @@ -85,12 +85,12 @@ int main( int argc, char *argv[] ) | |||
| 85 | // return 1; | 85 | // return 1; |
| 86 | //} | 86 | //} |
| 87 | 87 | ||
| 88 | if( prm.bDebug ) | 88 | //if( prm.bDebug ) |
| 89 | { | 89 | { |
| 90 | printf("\n\n----------\nDebug dump\n----------\n"); | 90 | printf("\n\n----------\nDebug dump\n----------\n"); |
| 91 | //bld.debug(); | 91 | bld.debugDump(); |
| 92 | } | 92 | } |
| 93 | else | 93 | //else |
| 94 | { | 94 | { |
| 95 | //if( prm.sAction > 0 ) | 95 | //if( prm.sAction > 0 ) |
| 96 | // bld.build( prm.sAction ); | 96 | // bld.build( prm.sAction ); |
