aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildparser.cpp16
-rw-r--r--src/buildparser.h7
-rw-r--r--src/parser.cpp27
-rw-r--r--src/parser.h40
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
34void 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
44void 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
10class Build; 11class Build;
11class BuildParser; 12class BuildParser;
@@ -46,7 +47,7 @@ enum eSetHow
46 setAdd 47 setAdd
47}; 48};
48 49
49class BuildParser 50class 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
64private: 62private:
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
4Parser::Parser()
5{
6}
7
8Parser::~Parser()
9{
10}
11
12void 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
22void 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
7class Build;
8
9#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
10typedef 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
22class Parser
23{
24public:
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
33protected:
34 std::string file;
35
36private:
37
38};
39
40#endif