<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Flex Bison C++ Example: example::Driver Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Class List</span></a></li>
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class Members</span></a></li>
</ul>
</div>
<div class="navpath"><a class="el" href="namespaceexample.html">example</a>::<a class="el" href="classexample_1_1Driver.html">Driver</a>
</div>
</div>
<div class="contents">
<h1>example::Driver Class Reference</h1><!-- doxytag: class="example::Driver" -->The <a class="el" href="classexample_1_1Driver.html" title="The Driver class brings together all components.">Driver</a> class brings together all components.
<a href="#_details">More...</a>
<p>
<code>#include <<a class="el" href="driver_8h_source.html">driver.h</a>></code>
<p>
<p>
<a href="classexample_1_1Driver-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#c7e62776c89658a2d2ff66761bed2a23">Driver</a> (class <a class="el" href="classCalcContext.html">CalcContext</a> &<a class="el" href="classexample_1_1Driver.html#95b70ba231e8b912fc638989ed977bcf">calc</a>)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">construct a new parser driver context <a href="#c7e62776c89658a2d2ff66761bed2a23"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#a02195b250993e74acceb0fdd5e04414">parse_stream</a> (std::istream &in, const std::string &sname="stream input")</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Invoke the scanner and parser for a stream. <a href="#a02195b250993e74acceb0fdd5e04414"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#34d3f98359759bd7dbec2ae9cf14ca6f">parse_string</a> (const std::string &input, const std::string &sname="string stream")</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Invoke the scanner and parser on an input string. <a href="#34d3f98359759bd7dbec2ae9cf14ca6f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#ffea06783586d2253a4231e89cfd1ff7">parse_file</a> (const std::string &filename)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Invoke the scanner and parser on a file. <a href="#ffea06783586d2253a4231e89cfd1ff7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#e86d346bd0baa8e13222f5c38a13623d">error</a> (const class <a class="el" href="classexample_1_1location.html">location</a> &l, const std::string &m)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Error handling with associated line number. <a href="#e86d346bd0baa8e13222f5c38a13623d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#4c1ddc62f8957c89302f9bfa6e75067f">error</a> (const std::string &m)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">General error handling. <a href="#4c1ddc62f8957c89302f9bfa6e75067f"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#2bb8042bae70236f6c1aaa0b60d3b171">trace_scanning</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">enable debug output in the flex scanner <a href="#2bb8042bae70236f6c1aaa0b60d3b171"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#680f62dafcd90219e3b943b9f89a7e5a">trace_parsing</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">enable debug output in the bison parser <a href="#680f62dafcd90219e3b943b9f89a7e5a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#fc2dff95d108322cd7032d192c0a8f92">streamname</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">stream name (file or input stream) used for error messages. <a href="#fc2dff95d108322cd7032d192c0a8f92"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class <a class="el" href="classexample_1_1Scanner.html">Scanner</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#986f4e13999e2f328041740d3ca6e4c2">lexer</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the current lexer instance, this is used to connect the parser to the scanner. <a href="#986f4e13999e2f328041740d3ca6e4c2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class <a class="el" href="classCalcContext.html">CalcContext</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classexample_1_1Driver.html#95b70ba231e8b912fc638989ed977bcf">calc</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Reference to the calculator context filled during parsing of the expressions. <a href="#95b70ba231e8b912fc638989ed977bcf"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
The <a class="el" href="classexample_1_1Driver.html" title="The Driver class brings together all components.">Driver</a> class brings together all components.
<p>
It creates an instance of the <a class="el" href="classexample_1_1Parser.html" title="A Bison parser.">Parser</a> and <a class="el" href="classexample_1_1Scanner.html" title="Scanner is a derived class to add some extra function to the scanner class.">Scanner</a> classes and connects them. Then the input stream is fed into the scanner object and the parser gets it's token sequence. Furthermore the driver object is available in the grammar rules as a parameter. Therefore the driver class contains a reference to the structure into which the parsed data is saved.
<p>Definition at line <a class="el" href="driver_8h_source.html#l00023">23</a> of file <a class="el" href="driver_8h_source.html">driver.h</a>.</p>
<hr><h2>Constructor & Destructor Documentation</h2>
<a class="anchor" name="c7e62776c89658a2d2ff66761bed2a23"></a><!-- doxytag: member="example::Driver::Driver" ref="c7e62776c89658a2d2ff66761bed2a23" args="(class CalcContext &calc)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">example::Driver::Driver </td>
<td>(</td>
<td class="paramtype">class <a class="el" href="classCalcContext.html">CalcContext</a> & </td>
<td class="paramname"> <em>calc</em> </td>
<td> ) </td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
construct a new parser driver context
<p>
<p>Definition at line <a class="el" href="driver_8cc_source.html#l00012">12</a> of file <a class="el" href="driver_8cc_source.html">driver.cc</a>.</p>
</div>
</div><p>
<hr><h2>Member Function Documentation</h2>
<a class="anchor" name="4c1ddc62f8957c89302f9bfa6e75067f"></a><!-- doxytag: member="example::Driver::error" ref="4c1ddc62f8957c89302f9bfa6e75067f" args="(const std::string &m)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void example::Driver::error </td>
<td>(</td>
<td class="paramtype">const std::string & </td>
<td class="paramname"> <em>m</em> </td>
<td> ) </td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
General error handling.
<p>
This can be modified to output the error e.g. to a dialog box.
<p>Definition at line <a class="el" href="driver_8cc_source.html#l00051">51</a> of file <a class="el" href="driver_8cc_source.html">driver.cc</a>.</p>
</div>
</div><p>
<a class="anchor" name="e86d346bd0baa8e13222f5c38a13623d"></a><!-- doxytag: member="example::Driver::error" ref="e86d346bd0baa8e13222f5c38a13623d" args="(const class location &l, const std::string &m)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void example::Driver::error </td>
<td>(</td>
<td class="paramtype">const class <a class="el" href="classexample_1_1location.html">location</a> & </td>
<td class="paramname"> <em>l</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string & </td>
<td class="paramname"> <em>m</em></td><td> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Error handling with associated line number.
<p>
This can be modified to output the error e.g. to a dialog box.
<p>Definition at line <a class="el" href="driver_8cc_source.html#l00045">45</a> of file <a class="el" href="driver_8cc_source.html">driver.cc</a>.</p>
<p>Referenced by <a class="el" href="parser_8cc_source.html#l01210">example::Parser::error()</a>.</p>
</div>
</div><p>
<a class="anchor" name="ffea06783586d2253a4231e89cfd1ff7"></a><!-- doxytag: member="example::Driver::parse_file" ref="ffea06783586d2253a4231e89cfd1ff7" args="(const std::string &filename)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool example::Driver::parse_file </td>
<td>(</td>
<td class="paramtype">const std::string & </td>
<td class="paramname"> <em>filename</em> </td>
<td> ) </td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Invoke the scanner and parser on a file.
<p>
Use parse_stream with a std::ifstream if detection of file reading errors is required. <dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>input file name </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if successfully parsed </dd></dl>
<p>Definition at line <a class="el" href="driver_8cc_source.html#l00032">32</a> of file <a class="el" href="driver_8cc_source.html">driver.cc</a>.</p>
<p>References <a class="el" href="driver_8cc_source.html#l00019">parse_stream()</a>.</p>
</div>
</div><p>
<a class="anchor" name="a02195b250993e74acceb0fdd5e04414"></a><!-- doxytag: member="example::Driver::parse_stream" ref="a02195b250993e74acceb0fdd5e04414" args="(std::istream &in, const std::string &sname="stream input")" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool example::Driver::parse_stream </td>
<td>(</td>
<td class="paramtype">std::istream & </td>
<td class="paramname"> <em>in</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string & </td>
<td class="paramname"> <em>sname</em> = <code>"stream input"</code></td><td> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Invoke the scanner and parser for a stream.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>in</em> </td><td>input stream </td></tr>
<tr><td valign="top"></td><td valign="top"><em>sname</em> </td><td>stream name for error messages </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if successfully parsed </dd></dl>
<p>Definition at line <a class="el" href="driver_8cc_source.html#l00019">19</a> of file <a class="el" href="driver_8cc_source.html">driver.cc</a>.</p>
<p>References <a class="el" href="driver_8h_source.html#l00075">lexer</a>, <a class="el" href="parser_8cc_source.html#l00368">example::Parser::parse()</a>, <a class="el" href="scanner_8cc_source.html#l01921">example::Scanner::set_debug()</a>, <a class="el" href="classexample_1_1Parser.html#5fb28eb5133e2711450edeebc8d4e505">example::Parser::set_debug_level()</a>, <a class="el" href="driver_8h_source.html#l00036">streamname</a>, <a class="el" href="driver_8h_source.html#l00033">trace_parsing</a>, and <a class="el" href="driver_8h_source.html#l00030">trace_scanning</a>.</p>
<p>Referenced by <a class="el" href="exprtest_8cc_source.html#l00009">main()</a>, <a class="el" href="driver_8cc_source.html#l00032">parse_file()</a>, and <a class="el" href="driver_8cc_source.html#l00039">parse_string()</a>.</p>
</div>
</div><p>
<a class="anchor" name="34d3f98359759bd7dbec2ae9cf14ca6f"></a><!-- doxytag: member="example::Driver::parse_string" ref="34d3f98359759bd7dbec2ae9cf14ca6f" args="(const std::string &input, const std::string &sname="string stream")" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool example::Driver::parse_string </td>
<td>(</td>
<td class="paramtype">const std::string & </td>
<td class="paramname"> <em>input</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::string & </td>
<td class="paramname"> <em>sname</em> = <code>"string stream"</code></td><td> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Invoke the scanner and parser on an input string.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>input</em> </td><td>input string </td></tr>
<tr><td valign="top"></td><td valign="top"><em>sname</em> </td><td>stream name for error messages </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if successfully parsed </dd></dl>
<p>Definition at line <a class="el" href="driver_8cc_source.html#l00039">39</a> of file <a class="el" href="driver_8cc_source.html">driver.cc</a>.</p>
<p>References <a class="el" href="driver_8cc_source.html#l00019">parse_stream()</a>.</p>
<p>Referenced by <a class="el" href="exprtest_8cc_source.html#l00009">main()</a>.</p>
</div>
</div><p>
<hr><h2>Member Data Documentation</h2>
<a class="anchor" name="95b70ba231e8b912fc638989ed977bcf"></a><!-- doxytag: member="example::Driver::calc" ref="95b70ba231e8b912fc638989ed977bcf" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">class <a class="el" href="classCalcContext.html">CalcContext</a>& <a class="el" href="classexample_1_1Driver.html#95b70ba231e8b912fc638989ed977bcf">example::Driver::calc</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Reference to the calculator context filled during parsing of the expressions.
<p>
<p>Definition at line <a class="el" href="driver_8h_source.html#l00079">79</a> of file <a class="el" href="driver_8h_source.html">driver.h</a>.</p>
<p>Referenced by <a class="el" href="parser_8cc_source.html#l00368">example::Parser::parse()</a>.</p>
</div>
</div><p>
<a class="anchor" name="986f4e13999e2f328041740d3ca6e4c2"></a><!-- doxytag: member="example::Driver::lexer" ref="986f4e13999e2f328041740d3ca6e4c2" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">class <a class="el" href="classexample_1_1Scanner.html">Scanner</a>* <a class="el" href="classexample_1_1Driver.html#986f4e13999e2f328041740d3ca6e4c2">example::Driver::lexer</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Pointer to the current lexer instance, this is used to connect the parser to the scanner.
<p>
It is used in the yylex macro.
<p>Definition at line <a class="el" href="driver_8h_source.html#l00075">75</a> of file <a class="el" href="driver_8h_source.html">driver.h</a>.</p>
<p>Referenced by <a class="el" href="driver_8cc_source.html#l00019">parse_stream()</a>.</p>
</div>
</div><p>
<a class="anchor" name="fc2dff95d108322cd7032d192c0a8f92"></a><!-- doxytag: member="example::Driver::streamname" ref="fc2dff95d108322cd7032d192c0a8f92" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::string <a class="el" href="classexample_1_1Driver.html#fc2dff95d108322cd7032d192c0a8f92">example::Driver::streamname</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
stream name (file or input stream) used for error messages.
<p>
<p>Definition at line <a class="el" href="driver_8h_source.html#l00036">36</a> of file <a class="el" href="driver_8h_source.html">driver.h</a>.</p>
<p>Referenced by <a class="el" href="parser_8cc_source.html#l00368">example::Parser::parse()</a>, and <a class="el" href="driver_8cc_source.html#l00019">parse_stream()</a>.</p>
</div>
</div><p>
<a class="anchor" name="680f62dafcd90219e3b943b9f89a7e5a"></a><!-- doxytag: member="example::Driver::trace_parsing" ref="680f62dafcd90219e3b943b9f89a7e5a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classexample_1_1Driver.html#680f62dafcd90219e3b943b9f89a7e5a">example::Driver::trace_parsing</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
enable debug output in the bison parser
<p>
<p>Definition at line <a class="el" href="driver_8h_source.html#l00033">33</a> of file <a class="el" href="driver_8h_source.html">driver.h</a>.</p>
<p>Referenced by <a class="el" href="exprtest_8cc_source.html#l00009">main()</a>, and <a class="el" href="driver_8cc_source.html#l00019">parse_stream()</a>.</p>
</div>
</div><p>
<a class="anchor" name="2bb8042bae70236f6c1aaa0b60d3b171"></a><!-- doxytag: member="example::Driver::trace_scanning" ref="2bb8042bae70236f6c1aaa0b60d3b171" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classexample_1_1Driver.html#2bb8042bae70236f6c1aaa0b60d3b171">example::Driver::trace_scanning</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
enable debug output in the flex scanner
<p>
<p>Definition at line <a class="el" href="driver_8h_source.html#l00030">30</a> of file <a class="el" href="driver_8h_source.html">driver.h</a>.</p>
<p>Referenced by <a class="el" href="exprtest_8cc_source.html#l00009">main()</a>, and <a class="el" href="driver_8cc_source.html#l00019">parse_stream()</a>.</p>
</div>
</div><p>
<hr>The documentation for this class was generated from the following files:<ul>
<li>src/<a class="el" href="driver_8h_source.html">driver.h</a><li>src/<a class="el" href="driver_8cc_source.html">driver.cc</a></ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Sep 5 10:26:25 2009 for Flex Bison C++ Example by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>