No empty .Rs/.Re
[netbsd-mini2440.git] / external / bsd / atf / dist / atf-c++ / parser.cpp
blobba4ee4c690888e0b1564d0dcdbc45d83bebde2b9
1 //
2 // Automated Testing Framework (atf)
3 //
4 // Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
5 // All rights reserved.
6 //
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions
9 // are met:
10 // 1. Redistributions of source code must retain the above copyright
11 // notice, this list of conditions and the following disclaimer.
12 // 2. Redistributions in binary form must reproduce the above copyright
13 // notice, this list of conditions and the following disclaimer in the
14 // documentation and/or other materials provided with the distribution.
16 // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17 // CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18 // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 // IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23 // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25 // IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include <sstream>
32 #include "atf-c++/parser.hpp"
34 namespace impl = atf::parser;
35 #define IMPL_NAME "atf::parser"
37 // ------------------------------------------------------------------------
38 // The "parse_error" class.
39 // ------------------------------------------------------------------------
41 impl::parse_error::parse_error(size_t line, std::string msg) :
42 std::runtime_error(msg),
43 std::pair< size_t, std::string >(line, msg)
47 impl::parse_error::~parse_error(void)
48 throw()
52 const char*
53 impl::parse_error::what(void)
54 const throw()
56 try {
57 std::ostringstream oss;
58 oss << "LONELY PARSE ERROR: " << first << ": " << second;
59 m_msg = oss.str();
60 return m_msg.c_str();
61 } catch (...) {
62 return "Could not format message for parsing error.";
66 // ------------------------------------------------------------------------
67 // The "parse_errors" class.
68 // ------------------------------------------------------------------------
70 impl::parse_errors::parse_errors(void) :
71 std::runtime_error("No parsing errors yet")
73 m_msg.clear();
76 impl::parse_errors::~parse_errors(void)
77 throw()
81 const char*
82 impl::parse_errors::what(void)
83 const throw()
85 try {
86 std::ostringstream oss;
87 for (const_iterator iter = begin(); iter != end(); iter++) {
88 oss << (*iter).first << ": " << (*iter).second
89 << std::endl;
91 m_msg = oss.str();
92 return m_msg.c_str();
93 } catch (...) {
94 return "Could not format messages for parsing errors.";
98 // ------------------------------------------------------------------------
99 // The "token" class.
100 // ------------------------------------------------------------------------
102 impl::token::token(void) :
103 m_inited(false)
107 impl::token::token(size_t p_line,
108 const token_type& p_type,
109 const std::string& p_text) :
110 m_inited(true),
111 m_line(p_line),
112 m_type(p_type),
113 m_text(p_text)
117 size_t
118 impl::token::lineno(void)
119 const
121 return m_line;
124 const impl::token_type&
125 impl::token::type(void)
126 const
128 return m_type;
131 const std::string&
132 impl::token::text(void)
133 const
135 return m_text;
138 impl::token::operator bool(void)
139 const
141 return m_inited;
144 bool
145 impl::token::operator!(void)
146 const
148 return !m_inited;