diff options
author | Mike Buland <eichlan@xagasoft.com> | 2006-08-28 18:51:25 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2006-08-28 18:51:25 +0000 |
commit | c41af88a8a3dcd3e9e0ea6dcbe7df9e71eb4eedd (patch) | |
tree | e9b7b5e4f968e3a375f554dba64ff5a46cb4b62b /src | |
parent | f7809b1a74da9a653b475b6fa499b078cad48c74 (diff) | |
download | build-c41af88a8a3dcd3e9e0ea6dcbe7df9e71eb4eedd.tar.gz build-c41af88a8a3dcd3e9e0ea6dcbe7df9e71eb4eedd.tar.bz2 build-c41af88a8a3dcd3e9e0ea6dcbe7df9e71eb4eedd.tar.xz build-c41af88a8a3dcd3e9e0ea6dcbe7df9e71eb4eedd.zip |
Finished getting everything to build with the new changes. Parser is now the
generic base class for anything that could create a build object.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildparser.cpp | 16 | ||||
-rw-r--r-- | src/buildparser.h | 7 | ||||
-rw-r--r-- | src/parser.cpp | 27 | ||||
-rw-r--r-- | src/parser.h | 40 |
4 files changed, 69 insertions, 21 deletions
diff --git a/src/buildparser.cpp b/src/buildparser.cpp index cb285d4..7903e04 100644 --- a/src/buildparser.cpp +++ b/src/buildparser.cpp | |||
@@ -31,22 +31,6 @@ Build *BuildParser::load( const std::string &sFile ) | |||
31 | return genBuild(); | 31 | return genBuild(); |
32 | } | 32 | } |
33 | 33 | ||
34 | void BuildParser::error( YYLTYPE *locp, const char *msg ) | ||
35 | { | ||
36 | fflush( stdout ); | ||
37 | throw BuildException("%s: %d.%d-%d.%d: %s", | ||
38 | file.c_str(), | ||
39 | locp->first_line, locp->first_column, | ||
40 | locp->last_line, locp->last_column, | ||
41 | msg ); | ||
42 | } | ||
43 | |||
44 | void BuildParser::error( const std::string &msg ) | ||
45 | { | ||
46 | fflush( stdout ); | ||
47 | throw BuildException("%s", msg.c_str() ); | ||
48 | } | ||
49 | |||
50 | // | 34 | // |
51 | // Target functions | 35 | // Target functions |
52 | // | 36 | // |
diff --git a/src/buildparser.h b/src/buildparser.h index 642cc73..2e1924c 100644 --- a/src/buildparser.h +++ b/src/buildparser.h | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <list> | 6 | #include <list> |
7 | #include <utility> | 7 | #include <utility> |
8 | #include "build.tab.h" | 8 | #include "build.tab.h" |
9 | #include "parser.h" | ||
9 | 10 | ||
10 | class Build; | 11 | class Build; |
11 | class BuildParser; | 12 | class BuildParser; |
@@ -46,7 +47,7 @@ enum eSetHow | |||
46 | setAdd | 47 | setAdd |
47 | }; | 48 | }; |
48 | 49 | ||
49 | class BuildParser | 50 | class BuildParser : public Parser |
50 | { | 51 | { |
51 | typedef std::pair<std::string, Function *> BuildListItem; | 52 | typedef std::pair<std::string, Function *> BuildListItem; |
52 | typedef std::list<BuildListItem> BuildList; | 53 | typedef std::list<BuildListItem> BuildList; |
@@ -56,13 +57,9 @@ public: | |||
56 | BuildParser(); | 57 | BuildParser(); |
57 | virtual ~BuildParser(); | 58 | virtual ~BuildParser(); |
58 | 59 | ||
59 | void error( YYLTYPE *locp, const char *msg ); | ||
60 | void error( const std::string &msg ); | ||
61 | |||
62 | Build *load( const std::string &sFile ); | 60 | Build *load( const std::string &sFile ); |
63 | 61 | ||
64 | private: | 62 | private: |
65 | std::string file; | ||
66 | void scanBegin(); | 63 | void scanBegin(); |
67 | void scanEnd(); | 64 | void scanEnd(); |
68 | 65 | ||
diff --git a/src/parser.cpp b/src/parser.cpp new file mode 100644 index 0000000..d9fd2d0 --- /dev/null +++ b/src/parser.cpp | |||
@@ -0,0 +1,27 @@ | |||
1 | #include "parser.h" | ||
2 | #include "build.h" | ||
3 | |||
4 | Parser::Parser() | ||
5 | { | ||
6 | } | ||
7 | |||
8 | Parser::~Parser() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | void Parser::error( YYLTYPE *locp, const char *msg ) | ||
13 | { | ||
14 | fflush( stdout ); | ||
15 | throw BuildException("%s: %d.%d-%d.%d: %s", | ||
16 | file.c_str(), | ||
17 | locp->first_line, locp->first_column, | ||
18 | locp->last_line, locp->last_column, | ||
19 | msg ); | ||
20 | } | ||
21 | |||
22 | void Parser::error( const std::string &msg ) | ||
23 | { | ||
24 | fflush( stdout ); | ||
25 | throw BuildException("%s", msg.c_str() ); | ||
26 | } | ||
27 | |||
diff --git a/src/parser.h b/src/parser.h new file mode 100644 index 0000000..675e28b --- /dev/null +++ b/src/parser.h | |||
@@ -0,0 +1,40 @@ | |||
1 | #ifndef PARSER_H | ||
2 | #define PARSER_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | |||
7 | class Build; | ||
8 | |||
9 | #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) | ||
10 | typedef struct YYLTYPE | ||
11 | { | ||
12 | int first_line; | ||
13 | int first_column; | ||
14 | int last_line; | ||
15 | int last_column; | ||
16 | } YYLTYPE; | ||
17 | # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ | ||
18 | # define YYLTYPE_IS_DECLARED 1 | ||
19 | # define YYLTYPE_IS_TRIVIAL 1 | ||
20 | #endif | ||
21 | |||
22 | class Parser | ||
23 | { | ||
24 | public: | ||
25 | Parser(); | ||
26 | virtual ~Parser(); | ||
27 | |||
28 | virtual void error( YYLTYPE *locp, const char *msg ); | ||
29 | virtual void error( const std::string &msg ); | ||
30 | |||
31 | virtual Build *load( const std::string &sFile ) = 0; | ||
32 | |||
33 | protected: | ||
34 | std::string file; | ||
35 | |||
36 | private: | ||
37 | |||
38 | }; | ||
39 | |||
40 | #endif | ||