Click here to Skip to main content
15,881,757 members
Articles / Desktop Programming / ATL

Visual Calc v3.0 - A new dimension for the desktop calculator

Rate me:
Please Sign up or sign in to vote.
3.62/5 (113 votes)
28 Apr 2006CPOL22 min read 348.7K   6.8K   104  
How to start programming a parser.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>VisualCalc Parser: VCalcParser.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.5 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="annotated.html"><span>Classes</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
  </ul></div>
<h1>VCalcParser.cpp</h1><a href="_v_calc_parser_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00008"></a>00008 <span class="preprocessor">#include "stdafx.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "<a class="code" href="_v_calc_parser_8h.html">VCalcParser.h</a>"</span>
<a name="l00010"></a>00010 
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 
<a name="l00022"></a><a class="code" href="class_c_v_calc_parser.html#c29d130824de8e6217826f3bddb43f4c">00022</a> <a class="code" href="class_c_v_calc_parser.html#c29d130824de8e6217826f3bddb43f4c">CVCalcParser::CVCalcParser</a>()
<a name="l00023"></a>00023         : m_PI(3.1415926535897932384626433832795),
<a name="l00024"></a>00024           m_E (2.7182818284590452353602874713527),
<a name="l00025"></a>00025           m_strParserVersion(<span class="stringliteral">"2.5"</span>) {
<a name="l00026"></a>00026     this-&gt;<a class="code" href="class_c_v_calc_parser.html#4676fc736cddb26564fcc55a3896dfef">ResetParserMembers</a>(<span class="stringliteral">""</span>);
<a name="l00027"></a>00027     this-&gt;<a class="code" href="class_c_v_calc_parser.html#8ca3bcfeffb2fe60d8ac00594ad113a6">ResetFunctions</a>();
<a name="l00028"></a>00028     this-&gt;<a class="code" href="class_c_v_calc_parser.html#d6cfe52738a37f353a6bad466330b01e">ResetVariables</a>();
<a name="l00029"></a>00029     this-&gt;<a class="code" href="class_c_v_calc_parser.html#cd8c53feaf3e054085378c652b259f2d">ResetAnswersHistory</a>();
<a name="l00030"></a>00030 }
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 
<a name="l00039"></a><a class="code" href="class_c_v_calc_parser.html#32bdb3fe05a07512580b3eb6df53d076">00039</a> <a class="code" href="class_c_v_calc_parser.html#32bdb3fe05a07512580b3eb6df53d076">CVCalcParser::~CVCalcParser</a>() {
<a name="l00040"></a>00040     this-&gt;<a class="code" href="class_c_v_calc_parser.html#4676fc736cddb26564fcc55a3896dfef">ResetParserMembers</a>(<span class="stringliteral">""</span>);
<a name="l00041"></a>00041     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.clear();
<a name="l00042"></a>00042     this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>.clear();
<a name="l00043"></a>00043     this-&gt;<a class="code" href="class_c_v_calc_parser.html#bf98769d76c70c0e1a8e201b2ce85f60">m_dqeAnswersHistory</a>.clear();
<a name="l00044"></a>00044 }
<a name="l00045"></a>00045 
<a name="l00046"></a>00046 
<a name="l00059"></a><a class="code" href="class_c_v_calc_parser.html#4676fc736cddb26564fcc55a3896dfef">00059</a> <span class="keywordtype">void</span> <a class="code" href="class_c_v_calc_parser.html#4676fc736cddb26564fcc55a3896dfef">CVCalcParser::ResetParserMembers</a>(<span class="keyword">const</span> std::string strSource) {
<a name="l00060"></a>00060     this-&gt;<a class="code" href="class_c_v_calc_parser.html#a0623aa02da54819cf4100ba7719dae9">m_tokCurrentToken</a>     = <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3bca2c7b3b6a043183c50e11e7f4b534">TV_END</a>;
<a name="l00061"></a>00061     this-&gt;<a class="code" href="class_c_v_calc_parser.html#a0c7add01e5a5ca2b4dcc8297e4fac5b">m_strSource</a>           = strSource;
<a name="l00062"></a>00062     this-&gt;<a class="code" href="class_c_v_calc_parser.html#0b3296194cfbc37bb2b5bddbecab2a5d">m_strIdentifierValue</a>  = <span class="stringliteral">""</span>;
<a name="l00063"></a>00063     this-&gt;<a class="code" href="class_c_v_calc_parser.html#9da21055ec1f7e972aceb1f5921f9363">m_strWarningMsg</a>       = <span class="stringliteral">""</span>;
<a name="l00064"></a>00064     this-&gt;<a class="code" href="class_c_v_calc_parser.html#2f571d7c799e8857aad7fddb011359e5">m_valNumberValue</a>      = 0.0;
<a name="l00065"></a>00065     this-&gt;<a class="code" href="class_c_v_calc_parser.html#de62d096cd40a44d83b20c0d281b7c4e">m_bWarningFlag</a>        = <span class="keyword">false</span>;
<a name="l00066"></a>00066     this-&gt;<a class="code" href="class_c_v_calc_parser.html#be462338d9d624357cd648b4e015d108">m_bEndEncountered</a>     = <span class="keyword">false</span>;
<a name="l00067"></a>00067     this-&gt;<a class="code" href="class_c_v_calc_parser.html#6177c1853c93e2d858cf3f9e21991023">m_iCurrentIndex</a>       = 0;
<a name="l00068"></a>00068 }
<a name="l00069"></a>00069 
<a name="l00070"></a>00070 
<a name="l00079"></a><a class="code" href="class_c_v_calc_parser.html#8ca3bcfeffb2fe60d8ac00594ad113a6">00079</a> <span class="keywordtype">void</span> <a class="code" href="class_c_v_calc_parser.html#8ca3bcfeffb2fe60d8ac00594ad113a6">CVCalcParser::ResetFunctions</a>() {
<a name="l00080"></a>00080     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.clear();
<a name="l00081"></a>00081     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"abs"</span>);
<a name="l00082"></a>00082     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"Acos"</span>);
<a name="l00083"></a>00083     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"Ans"</span>);
<a name="l00084"></a>00084     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"Asin"</span>);
<a name="l00085"></a>00085     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"Atan"</span>);
<a name="l00086"></a>00086     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"cos"</span>);
<a name="l00087"></a>00087     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"cosh"</span>);
<a name="l00088"></a>00088     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"deg"</span>);
<a name="l00089"></a>00089     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"exp"</span>);
<a name="l00090"></a>00090     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"ln"</span>);
<a name="l00091"></a>00091     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"log"</span>);
<a name="l00092"></a>00092     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"logn"</span>);
<a name="l00093"></a>00093     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"nAp"</span>);
<a name="l00094"></a>00094     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"nCp"</span>);
<a name="l00095"></a>00095     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"product"</span>);
<a name="l00096"></a>00096     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"rad"</span>);
<a name="l00097"></a>00097     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"sin"</span>);
<a name="l00098"></a>00098     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"sinh"</span>);
<a name="l00099"></a>00099     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"sqrt"</span>);
<a name="l00100"></a>00100     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"sqrtn"</span>);
<a name="l00101"></a>00101     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"sum"</span>);
<a name="l00102"></a>00102     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"tan"</span>);
<a name="l00103"></a>00103     this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.push_back(<span class="stringliteral">"tanh"</span>);
<a name="l00104"></a>00104 }
<a name="l00105"></a>00105 
<a name="l00106"></a>00106 
<a name="l00115"></a><a class="code" href="class_c_v_calc_parser.html#d6cfe52738a37f353a6bad466330b01e">00115</a> <span class="keywordtype">void</span> <a class="code" href="class_c_v_calc_parser.html#d6cfe52738a37f353a6bad466330b01e">CVCalcParser::ResetVariables</a>() {
<a name="l00116"></a>00116     this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>.clear();
<a name="l00117"></a>00117     this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>[<span class="stringliteral">"e"</span>]  = <a class="code" href="class_c_v_calc_parser.html#1bba65a4ef7ac2537f444674df28bddd">m_E</a>;
<a name="l00118"></a>00118     this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>[<span class="stringliteral">"pi"</span>] = <a class="code" href="class_c_v_calc_parser.html#14d6bc58920086d6c3f8707c6ca4e0b4">m_PI</a>;
<a name="l00119"></a>00119 }
<a name="l00120"></a>00120 
<a name="l00121"></a>00121 
<a name="l00128"></a><a class="code" href="class_c_v_calc_parser.html#cd8c53feaf3e054085378c652b259f2d">00128</a> <span class="keywordtype">void</span> <a class="code" href="class_c_v_calc_parser.html#cd8c53feaf3e054085378c652b259f2d">CVCalcParser::ResetAnswersHistory</a>() {
<a name="l00129"></a>00129     this-&gt;<a class="code" href="class_c_v_calc_parser.html#bf98769d76c70c0e1a8e201b2ce85f60">m_dqeAnswersHistory</a>.clear();
<a name="l00130"></a>00130 }
<a name="l00131"></a>00131 
<a name="l00132"></a>00132 
<a name="l00140"></a><a class="code" href="class_c_v_calc_parser.html#d857340985c20f9f517f76b584ae2b97">00140</a> <span class="keyword">const</span> std::list&lt;std::string&gt;&amp; <a class="code" href="class_c_v_calc_parser.html#d857340985c20f9f517f76b584ae2b97">CVCalcParser::GetFunctions</a>() {
<a name="l00141"></a>00141     <span class="keywordflow">return</span> this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>;
<a name="l00142"></a>00142 }
<a name="l00143"></a>00143 
<a name="l00144"></a>00144 
<a name="l00153"></a><a class="code" href="class_c_v_calc_parser.html#3acf05c52be0fb64215757f3e8c77efa">00153</a> <span class="keyword">const</span> std::map&lt;std::string, VALUES_TYPE&gt;&amp; <a class="code" href="class_c_v_calc_parser.html#3acf05c52be0fb64215757f3e8c77efa">CVCalcParser::GetVariables</a>() {
<a name="l00154"></a>00154     <span class="keywordflow">return</span> this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>;
<a name="l00155"></a>00155 }
<a name="l00156"></a>00156 
<a name="l00157"></a>00157 
<a name="l00166"></a><a class="code" href="class_c_v_calc_parser.html#ad66c566cb621bad9a30830428478500">00166</a> <span class="keyword">const</span> std::deque&lt;AnswerItem&gt;&amp; <a class="code" href="class_c_v_calc_parser.html#ad66c566cb621bad9a30830428478500">CVCalcParser::GetAnswersHistory</a>() {
<a name="l00167"></a>00167     <span class="keywordflow">return</span> this-&gt;<a class="code" href="class_c_v_calc_parser.html#bf98769d76c70c0e1a8e201b2ce85f60">m_dqeAnswersHistory</a>;
<a name="l00168"></a>00168 }
<a name="l00169"></a>00169 
<a name="l00170"></a>00170 
<a name="l00179"></a><a class="code" href="class_c_v_calc_parser.html#e5bbc359d1790e4e5b6599c588956469">00179</a> <span class="keywordtype">bool</span> <a class="code" href="class_c_v_calc_parser.html#e5bbc359d1790e4e5b6599c588956469">CVCalcParser::HasWarning</a>() {
<a name="l00180"></a>00180     <span class="keywordflow">return</span> this-&gt;<a class="code" href="class_c_v_calc_parser.html#de62d096cd40a44d83b20c0d281b7c4e">m_bWarningFlag</a>;
<a name="l00181"></a>00181 }
<a name="l00182"></a>00182 
<a name="l00183"></a>00183 
<a name="l00192"></a><a class="code" href="class_c_v_calc_parser.html#78b0204cb38c8bd1aa3932257e333dd5">00192</a> std::string <a class="code" href="class_c_v_calc_parser.html#78b0204cb38c8bd1aa3932257e333dd5">CVCalcParser::GetWarningMsg</a>() {
<a name="l00193"></a>00193     <span class="keywordflow">return</span> this-&gt;<a class="code" href="class_c_v_calc_parser.html#9da21055ec1f7e972aceb1f5921f9363">m_strWarningMsg</a>;
<a name="l00194"></a>00194 }
<a name="l00195"></a>00195 
<a name="l00196"></a>00196 
<a name="l00204"></a><a class="code" href="class_c_v_calc_parser.html#f2628ce7dfbb18178fd65dc19091cb47">00204</a> std::string <a class="code" href="class_c_v_calc_parser.html#f2628ce7dfbb18178fd65dc19091cb47">CVCalcParser::GetVersion</a>() {
<a name="l00205"></a>00205     <span class="keywordflow">return</span> this-&gt;<a class="code" href="class_c_v_calc_parser.html#f4fcdbbe5e0113f7c97e0cad9238a322">m_strParserVersion</a>;
<a name="l00206"></a>00206 }
<a name="l00207"></a>00207 
<a name="l00208"></a>00208 
<a name="l00224"></a><a class="code" href="class_c_v_calc_parser.html#ac4f8ba7577444b9dc8f3fd7e1ef999d">00224</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#ac4f8ba7577444b9dc8f3fd7e1ef999d">CVCalcParser::ffactor</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00225"></a>00225         <span class="keywordflow">throw</span>(<a class="code" href="class_c_factorial_def_for_positive_ints_exception.html">CFactorialDefForPositiveIntsException</a>,
<a name="l00226"></a>00226               <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>) {
<a name="l00227"></a>00227     <span class="keywordflow">if</span> (valOperand &lt; 0) {
<a name="l00228"></a>00228         <span class="keywordflow">throw</span> <a class="code" href="class_c_factorial_def_for_positive_ints_exception.html">CFactorialDefForPositiveIntsException</a>(this-&gt;m_iCurrentIndex);
<a name="l00229"></a>00229     }
<a name="l00230"></a>00230     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (valOperand != ::floor(valOperand)) {
<a name="l00231"></a>00231         <span class="keywordflow">throw</span> <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>(this-&gt;m_iCurrentIndex);
<a name="l00232"></a>00232     }
<a name="l00233"></a>00233     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (valOperand == 0) {
<a name="l00234"></a>00234         valOperand = 1;
<a name="l00235"></a>00235     }
<a name="l00236"></a>00236     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (valOperand &gt; 0) {
<a name="l00237"></a>00237         <span class="keywordflow">for</span> (<span class="keywordtype">long</span> i = valOperand-1; i &gt; 1; i--) {
<a name="l00238"></a>00238             valOperand *= i;
<a name="l00239"></a>00239         }
<a name="l00240"></a>00240     }
<a name="l00241"></a>00241     <span class="keywordflow">return</span> valOperand;
<a name="l00242"></a>00242 }
<a name="l00243"></a>00243 
<a name="l00244"></a>00244 
<a name="l00266"></a><a class="code" href="class_c_v_calc_parser.html#d419513e44bde20cbe781aebc38e49d8">00266</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#d419513e44bde20cbe781aebc38e49d8">CVCalcParser::nCp</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> n, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> p)
<a name="l00267"></a>00267         <span class="keywordflow">throw</span>(<a class="code" href="class_c_n_must_be_positive_exception.html">CNMustBePositiveException</a>,
<a name="l00268"></a>00268               <a class="code" href="class_c_p_must_be_positive_exception.html">CPMustBePositiveException</a>,
<a name="l00269"></a>00269               <a class="code" href="class_c_p_must_be_smaller_than_n_exception.html">CPMustBeSmallerThanNException</a>,
<a name="l00270"></a>00270               <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>) {
<a name="l00271"></a>00271     <span class="keywordflow">if</span> (n &lt; 0) {
<a name="l00272"></a>00272         <span class="keywordflow">throw</span> CNMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00273"></a>00273     }
<a name="l00274"></a>00274     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p &lt; 0) {
<a name="l00275"></a>00275         <span class="keywordflow">throw</span> CPMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00276"></a>00276     }
<a name="l00277"></a>00277     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (n != ::floor(n)) {
<a name="l00278"></a>00278         <span class="keywordflow">throw</span> <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>(this-&gt;m_iCurrentIndex);
<a name="l00279"></a>00279     }
<a name="l00280"></a>00280     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p != ::floor(p)) {
<a name="l00281"></a>00281         <span class="keywordflow">throw</span> <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>(this-&gt;m_iCurrentIndex);
<a name="l00282"></a>00282     }
<a name="l00283"></a>00283     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p &gt; n) {
<a name="l00284"></a>00284         <span class="keywordflow">throw</span> CPMustBeSmallerThanNException(this-&gt;m_iCurrentIndex);
<a name="l00285"></a>00285     }
<a name="l00286"></a>00286     <span class="comment">//  n! / ((n-p)! * p!)</span>
<a name="l00287"></a>00287     <span class="keywordflow">return</span> (this-&gt;ffactor(n)) / ( this-&gt;ffactor(n - p) * this-&gt;ffactor(p) );
<a name="l00288"></a>00288 }
<a name="l00289"></a>00289 
<a name="l00290"></a>00290 
<a name="l00312"></a><a class="code" href="class_c_v_calc_parser.html#8f5e1a27fee1e8aea82de140cd8fc839">00312</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#8f5e1a27fee1e8aea82de140cd8fc839">CVCalcParser::nAp</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> n, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> p)
<a name="l00313"></a>00313         <span class="keywordflow">throw</span>(CNMustBePositiveException,
<a name="l00314"></a>00314               CPMustBePositiveException,
<a name="l00315"></a>00315               CPMustBeSmallerThanNException,
<a name="l00316"></a>00316               <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>) {
<a name="l00317"></a>00317     <span class="keywordflow">if</span> (n &lt; 0) {
<a name="l00318"></a>00318         <span class="keywordflow">throw</span> CNMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00319"></a>00319     }
<a name="l00320"></a>00320     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p &lt; 0) {
<a name="l00321"></a>00321         <span class="keywordflow">throw</span> CPMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00322"></a>00322     }
<a name="l00323"></a>00323     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (n != ::floor(n)) {
<a name="l00324"></a>00324         <span class="keywordflow">throw</span> <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>(this-&gt;m_iCurrentIndex);
<a name="l00325"></a>00325     }
<a name="l00326"></a>00326     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p != ::floor(p)) {
<a name="l00327"></a>00327         <span class="keywordflow">throw</span> <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>(this-&gt;m_iCurrentIndex);
<a name="l00328"></a>00328     }
<a name="l00329"></a>00329     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p &gt; n) {
<a name="l00330"></a>00330         <span class="keywordflow">throw</span> CPMustBeSmallerThanNException(this-&gt;m_iCurrentIndex);
<a name="l00331"></a>00331     }
<a name="l00332"></a>00332     <span class="comment">//  n! / (n-p)!</span>
<a name="l00333"></a>00333     <span class="keywordflow">return</span> (this-&gt;ffactor(n)) / ( this-&gt;ffactor(n - p) );
<a name="l00334"></a>00334 }
<a name="l00335"></a>00335 
<a name="l00336"></a>00336 
<a name="l00353"></a><a class="code" href="class_c_v_calc_parser.html#217b97a3398d351cf3823bb3d8feef26">00353</a> <a class="code" href="struct_answer_item.html">AnswerItem</a> <a class="code" href="class_c_v_calc_parser.html#217b97a3398d351cf3823bb3d8feef26">CVCalcParser::Ans</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valIndex)
<a name="l00354"></a>00354         <span class="keywordflow">throw</span>(<a class="code" href="class_c_dom_parameter_must_be_positive_exception.html">CDomParameterMustBePositiveException</a>,
<a name="l00355"></a>00355               <a class="code" href="class_c_dom_parameter_must_be_an_integer_exception.html">CDomParameterMustBeAnIntegerException</a>,
<a name="l00356"></a>00356               <a class="code" href="class_c_answer_requested_not_found_exception.html">CAnswerRequestedNotFoundException</a>) {
<a name="l00357"></a>00357     valIndex--;
<a name="l00358"></a>00358     <span class="keywordflow">if</span> (valIndex &lt; 0) {
<a name="l00359"></a>00359         <span class="keywordflow">throw</span> <a class="code" href="class_c_dom_parameter_must_be_positive_exception.html">CDomParameterMustBePositiveException</a>(this-&gt;m_iCurrentIndex);
<a name="l00360"></a>00360     }
<a name="l00361"></a>00361     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (valIndex != ::floor(valIndex)) {
<a name="l00362"></a>00362         <span class="keywordflow">throw</span> CDomParameterMustBeAnIntegerException(this-&gt;m_iCurrentIndex);
<a name="l00363"></a>00363     }
<a name="l00364"></a>00364     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (valIndex &gt;= this-&gt;m_dqeAnswersHistory.size()) {
<a name="l00365"></a>00365         <span class="keywordflow">throw</span> <a class="code" href="class_c_answer_requested_not_found_exception.html">CAnswerRequestedNotFoundException</a>(this-&gt;m_iCurrentIndex);
<a name="l00366"></a>00366     }
<a name="l00367"></a>00367     <span class="keywordflow">return</span> m_dqeAnswersHistory.at((<span class="keywordtype">int</span>)valIndex);
<a name="l00368"></a>00368 }
<a name="l00369"></a>00369 
<a name="l00370"></a>00370 
<a name="l00379"></a><a class="code" href="class_c_v_calc_parser.html#be249590e704ae956317cdfeddfcf2b1">00379</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#be249590e704ae956317cdfeddfcf2b1">CVCalcParser::abs</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand) {
<a name="l00380"></a>00380     return ::fabs(valOperand);
<a name="l00381"></a>00381 }
<a name="l00382"></a>00382 
<a name="l00383"></a>00383 
<a name="l00395"></a><a class="code" href="class_c_v_calc_parser.html#a066fc0d8e21cf8854823cb6c63adb56">00395</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#a066fc0d8e21cf8854823cb6c63adb56">CVCalcParser::cos</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00396"></a>00396         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00397"></a>00397     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valResult;
<a name="l00398"></a>00398     <span class="keywordflow">try</span> {
<a name="l00399"></a>00399         valResult = ::cos(valOperand);
<a name="l00400"></a>00400     }
<a name="l00401"></a>00401     <span class="keywordflow">catch</span> (...) {
<a name="l00402"></a>00402         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00403"></a>00403     }
<a name="l00404"></a>00404     <span class="keywordflow">return</span> valResult;
<a name="l00405"></a>00405 }
<a name="l00406"></a>00406 
<a name="l00407"></a>00407 
<a name="l00419"></a><a class="code" href="class_c_v_calc_parser.html#ccdc395b4777fe75b7aad79ec188868b">00419</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#ccdc395b4777fe75b7aad79ec188868b">CVCalcParser::sin</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00420"></a>00420         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00421"></a>00421     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valResult;
<a name="l00422"></a>00422     <span class="keywordflow">try</span> {
<a name="l00423"></a>00423         valResult = ::sin(valOperand);
<a name="l00424"></a>00424     }
<a name="l00425"></a>00425     <span class="keywordflow">catch</span> (...) {
<a name="l00426"></a>00426         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00427"></a>00427     }
<a name="l00428"></a>00428     <span class="keywordflow">return</span> valResult;
<a name="l00429"></a>00429 }
<a name="l00430"></a>00430 
<a name="l00431"></a>00431 
<a name="l00443"></a><a class="code" href="class_c_v_calc_parser.html#41040fcd49f23a12d66e81ab8d29ec09">00443</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#41040fcd49f23a12d66e81ab8d29ec09">CVCalcParser::tan</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00444"></a>00444         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00445"></a>00445     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valResult;
<a name="l00446"></a>00446     <span class="keywordflow">try</span> {
<a name="l00447"></a>00447         valResult = ::tan(valOperand);
<a name="l00448"></a>00448     }
<a name="l00449"></a>00449     <span class="keywordflow">catch</span> (...) {
<a name="l00450"></a>00450         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00451"></a>00451     }
<a name="l00452"></a>00452     <span class="keywordflow">return</span> valResult;
<a name="l00453"></a>00453 }
<a name="l00454"></a>00454 
<a name="l00455"></a>00455 
<a name="l00469"></a><a class="code" href="class_c_v_calc_parser.html#460a276dbda929bce5dcff28c49e4a37">00469</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#460a276dbda929bce5dcff28c49e4a37">CVCalcParser::cosh</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00470"></a>00470         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00471"></a>00471     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valResult;
<a name="l00472"></a>00472     <span class="keywordflow">try</span> {
<a name="l00473"></a>00473         valResult = ::cosh(valOperand);
<a name="l00474"></a>00474     }
<a name="l00475"></a>00475     <span class="keywordflow">catch</span> (...) {
<a name="l00476"></a>00476         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00477"></a>00477     }
<a name="l00478"></a>00478     <span class="keywordflow">return</span> valResult;
<a name="l00479"></a>00479 }
<a name="l00480"></a>00480 
<a name="l00481"></a>00481 
<a name="l00495"></a><a class="code" href="class_c_v_calc_parser.html#d080f9fdcdd1d06022b6206429fe260e">00495</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#d080f9fdcdd1d06022b6206429fe260e">CVCalcParser::sinh</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00496"></a>00496         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00497"></a>00497     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valResult;
<a name="l00498"></a>00498     <span class="keywordflow">try</span> {
<a name="l00499"></a>00499         valResult = ::sinh(valOperand);
<a name="l00500"></a>00500     }
<a name="l00501"></a>00501     <span class="keywordflow">catch</span> (...) {
<a name="l00502"></a>00502         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00503"></a>00503     }
<a name="l00504"></a>00504     <span class="keywordflow">return</span> valResult;
<a name="l00505"></a>00505 }
<a name="l00506"></a>00506 
<a name="l00507"></a>00507 
<a name="l00521"></a><a class="code" href="class_c_v_calc_parser.html#d0cb912f3527dbee24318528ab8823f0">00521</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#d0cb912f3527dbee24318528ab8823f0">CVCalcParser::tanh</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00522"></a>00522         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00523"></a>00523     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valResult;
<a name="l00524"></a>00524     <span class="keywordflow">try</span> {
<a name="l00525"></a>00525         valResult = ::tanh(valOperand);
<a name="l00526"></a>00526     }
<a name="l00527"></a>00527     <span class="keywordflow">catch</span> (...) {
<a name="l00528"></a>00528         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00529"></a>00529     }
<a name="l00530"></a>00530     <span class="keywordflow">return</span> valResult;
<a name="l00531"></a>00531 }
<a name="l00532"></a>00532 
<a name="l00533"></a>00533 
<a name="l00546"></a><a class="code" href="class_c_v_calc_parser.html#dd053deefb9c5b003703a6659c598946">00546</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#dd053deefb9c5b003703a6659c598946">CVCalcParser::Acos</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00547"></a>00547         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00548"></a>00548     <span class="keywordflow">if</span> ((valOperand &lt; -1) || (valOperand &gt; 1)) {
<a name="l00549"></a>00549         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00550"></a>00550     }
<a name="l00551"></a>00551     return ::acos(valOperand);
<a name="l00552"></a>00552 }
<a name="l00553"></a>00553 
<a name="l00554"></a>00554 
<a name="l00567"></a><a class="code" href="class_c_v_calc_parser.html#4dd2bd839beb8986f034dca7e687d29f">00567</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#4dd2bd839beb8986f034dca7e687d29f">CVCalcParser::Asin</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00568"></a>00568         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00569"></a>00569     <span class="keywordflow">if</span> ((valOperand &lt; -1) || (valOperand &gt; 1)) {
<a name="l00570"></a>00570         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00571"></a>00571     }
<a name="l00572"></a>00572     return ::asin(valOperand);
<a name="l00573"></a>00573 }
<a name="l00574"></a>00574 
<a name="l00575"></a>00575 
<a name="l00587"></a><a class="code" href="class_c_v_calc_parser.html#28e75fc1e44eb3c4438256d392ea2fc9">00587</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#28e75fc1e44eb3c4438256d392ea2fc9">CVCalcParser::Atan</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00588"></a>00588         <span class="keywordflow">throw</span>(<a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>) {
<a name="l00589"></a>00589     <span class="keywordflow">if</span> ((valOperand &lt; -1) || (valOperand &gt; 1)) {
<a name="l00590"></a>00590         <span class="keywordflow">throw</span> <a class="code" href="class_c_parameter_out_of_range_exception.html">CParameterOutOfRangeException</a>(this-&gt;m_iCurrentIndex);
<a name="l00591"></a>00591     }
<a name="l00592"></a>00592     return ::atan(valOperand);
<a name="l00593"></a>00593 }
<a name="l00594"></a>00594 
<a name="l00595"></a>00595 
<a name="l00604"></a><a class="code" href="class_c_v_calc_parser.html#d4ab77a9c36608751a5c362dae6d8813">00604</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#d4ab77a9c36608751a5c362dae6d8813">CVCalcParser::deg</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand) {
<a name="l00605"></a>00605     <span class="keywordflow">return</span> ( (180 * valOperand) / this-&gt;m_PI );
<a name="l00606"></a>00606 }
<a name="l00607"></a>00607 
<a name="l00608"></a>00608 
<a name="l00618"></a><a class="code" href="class_c_v_calc_parser.html#223e308cab7c1c8f3ed754f6a8bc6984">00618</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#223e308cab7c1c8f3ed754f6a8bc6984">CVCalcParser::rad</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand) {
<a name="l00619"></a>00619     <span class="keywordflow">return</span> ( (this-&gt;m_PI * valOperand) / 180 );
<a name="l00620"></a>00620 }
<a name="l00621"></a>00621 
<a name="l00622"></a>00622 
<a name="l00631"></a><a class="code" href="class_c_v_calc_parser.html#fe89dd21dcf2cd8d75d3c6d92196ded6">00631</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#fe89dd21dcf2cd8d75d3c6d92196ded6">CVCalcParser::exp</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand) {
<a name="l00632"></a>00632     return ::exp(valOperand);
<a name="l00633"></a>00633 }
<a name="l00634"></a>00634 
<a name="l00635"></a>00635 
<a name="l00648"></a><a class="code" href="class_c_v_calc_parser.html#d992912845097e4bb9e6cee3c81a7482">00648</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#d992912845097e4bb9e6cee3c81a7482">CVCalcParser::ln</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00649"></a>00649         <span class="keywordflow">throw</span>(<a class="code" href="class_c_math_parameter_must_be_positive_exception.html">CMathParameterMustBePositiveException</a>) {
<a name="l00650"></a>00650     <span class="keywordflow">if</span> (valOperand &lt; 0) {
<a name="l00651"></a>00651         <span class="keywordflow">throw</span> <a class="code" href="class_c_math_parameter_must_be_positive_exception.html">CMathParameterMustBePositiveException</a>(this-&gt;m_iCurrentIndex);
<a name="l00652"></a>00652     }
<a name="l00653"></a>00653     return ::log(valOperand);
<a name="l00654"></a>00654 }
<a name="l00655"></a>00655 
<a name="l00656"></a>00656 
<a name="l00669"></a><a class="code" href="class_c_v_calc_parser.html#4331a778a55adebb9a49d3203b761310">00669</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#4331a778a55adebb9a49d3203b761310">CVCalcParser::log</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00670"></a>00670         <span class="keywordflow">throw</span>(<a class="code" href="class_c_math_parameter_must_be_positive_exception.html">CMathParameterMustBePositiveException</a>) {
<a name="l00671"></a>00671     <span class="keywordflow">if</span> (valOperand &lt; 0) {
<a name="l00672"></a>00672         <span class="keywordflow">throw</span> <a class="code" href="class_c_math_parameter_must_be_positive_exception.html">CMathParameterMustBePositiveException</a>(this-&gt;m_iCurrentIndex);
<a name="l00673"></a>00673     }
<a name="l00674"></a>00674     return ::log10(valOperand);
<a name="l00675"></a>00675 }
<a name="l00676"></a>00676 
<a name="l00677"></a>00677 
<a name="l00693"></a><a class="code" href="class_c_v_calc_parser.html#417f1f76518ff1693a839712f443fa0a">00693</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#417f1f76518ff1693a839712f443fa0a">CVCalcParser::logn</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valBase)
<a name="l00694"></a>00694         <span class="keywordflow">throw</span>(<a class="code" href="class_c_math_parameter_must_be_positive_exception.html">CMathParameterMustBePositiveException</a>,
<a name="l00695"></a>00695               <a class="code" href="class_c_division_by_zero_exception.html">CDivisionByZeroException</a>) {
<a name="l00696"></a>00696     <span class="keywordflow">if</span> (valOperand &lt; 0) {
<a name="l00697"></a>00697         <span class="keywordflow">throw</span> CMathParameterMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00698"></a>00698     }
<a name="l00699"></a>00699     <span class="keywordflow">if</span> (valBase == 0) {
<a name="l00700"></a>00700         <span class="keywordflow">throw</span> <a class="code" href="class_c_division_by_zero_exception.html">CDivisionByZeroException</a>(this-&gt;m_iCurrentIndex);
<a name="l00701"></a>00701     }
<a name="l00702"></a>00702     <span class="keywordflow">if</span> (valBase &lt; 0) {
<a name="l00703"></a>00703         <span class="keywordflow">throw</span> CMathParameterMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00704"></a>00704     }
<a name="l00705"></a>00705     <span class="keywordflow">return</span> ( ::log(valOperand) / ::log(valBase) );
<a name="l00706"></a>00706 }
<a name="l00707"></a>00707 
<a name="l00708"></a>00708 
<a name="l00720"></a><a class="code" href="class_c_v_calc_parser.html#d80f90e6ebeeadde59f6d64290480062">00720</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#d80f90e6ebeeadde59f6d64290480062">CVCalcParser::sqrt</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand)
<a name="l00721"></a>00721         <span class="keywordflow">throw</span>(CMathParameterMustBePositiveException) {
<a name="l00722"></a>00722     <span class="keywordflow">if</span> (valOperand &lt; 0) {
<a name="l00723"></a>00723         <span class="keywordflow">throw</span> CMathParameterMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00724"></a>00724     }
<a name="l00725"></a>00725     return ::sqrt(valOperand);
<a name="l00726"></a>00726 }
<a name="l00727"></a>00727 
<a name="l00728"></a>00728 
<a name="l00744"></a><a class="code" href="class_c_v_calc_parser.html#99566824e2739113c77413beb0a92645">00744</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#99566824e2739113c77413beb0a92645">CVCalcParser::sqrtn</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOperand, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valOrder)
<a name="l00745"></a>00745         <span class="keywordflow">throw</span>(CMathParameterMustBePositiveException,
<a name="l00746"></a>00746               <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>) {
<a name="l00747"></a>00747     <span class="keywordflow">if</span> (valOperand &lt; 0.) {
<a name="l00748"></a>00748         <span class="keywordflow">throw</span> CMathParameterMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00749"></a>00749     }
<a name="l00750"></a>00750     <span class="keywordflow">if</span> (valOrder &lt;= 0.) {
<a name="l00751"></a>00751         <span class="keywordflow">throw</span> CMathParameterMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00752"></a>00752     }
<a name="l00753"></a>00753     <span class="keywordflow">if</span> (valOrder != ::floor(valOrder)) {
<a name="l00754"></a>00754         <span class="keywordflow">throw</span> <a class="code" href="class_c_math_parameter_must_be_an_integer_exception.html">CMathParameterMustBeAnIntegerException</a>(this-&gt;m_iCurrentIndex);
<a name="l00755"></a>00755     }
<a name="l00756"></a>00756     return ::pow(valOperand, 1/valOrder);
<a name="l00757"></a>00757 }
<a name="l00758"></a>00758 
<a name="l00759"></a>00759 
<a name="l00773"></a><a class="code" href="class_c_v_calc_parser.html#e8f23056e0976c195beb61c92ad76243">00773</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#e8f23056e0976c195beb61c92ad76243">CVCalcParser::pow</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valLeftOperand, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valRightOperand)
<a name="l00774"></a>00774         <span class="keywordflow">throw</span>(CMathParameterMustBePositiveException) {
<a name="l00775"></a>00775     <span class="keywordflow">if</span> ((valLeftOperand == 0.) &amp;&amp; (valRightOperand &lt; 0.)) {
<a name="l00776"></a>00776         <span class="keywordflow">throw</span> CMathParameterMustBePositiveException(this-&gt;m_iCurrentIndex);
<a name="l00777"></a>00777     }
<a name="l00778"></a>00778     <span class="keywordflow">if</span> ((valLeftOperand == 0.) &amp;&amp; (valRightOperand == 0.)) {
<a name="l00779"></a>00779         this-&gt;m_strWarningMsg = <span class="stringliteral">"Warning: 0^0 replaced by 1"</span>;
<a name="l00780"></a>00780         this-&gt;m_bWarningFlag  = <span class="keyword">true</span>;
<a name="l00781"></a>00781         <span class="keywordflow">return</span> 1.;
<a name="l00782"></a>00782     }
<a name="l00783"></a>00783     return ::pow(valLeftOperand, valRightOperand);
<a name="l00784"></a>00784 }
<a name="l00785"></a>00785 
<a name="l00786"></a>00786 
<a name="l00797"></a><a class="code" href="class_c_v_calc_parser.html#1e7a02838976ed64a7c3749822270c3a">00797</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#1e7a02838976ed64a7c3749822270c3a">CVCalcParser::mod</a>(<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valLeftOperand, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valRightOperand)
<a name="l00798"></a>00798         <span class="keywordflow">throw</span>(<a class="code" href="class_c_division_by_zero_exception.html">CDivisionByZeroException</a>) {
<a name="l00799"></a>00799     <span class="keywordflow">if</span> (valRightOperand == 0.) {
<a name="l00800"></a>00800         <span class="keywordflow">throw</span> <a class="code" href="class_c_division_by_zero_exception.html">CDivisionByZeroException</a>(this-&gt;m_iCurrentIndex);
<a name="l00801"></a>00801     }
<a name="l00802"></a>00802     return ::fmod(valLeftOperand, valRightOperand);
<a name="l00803"></a>00803 }
<a name="l00804"></a>00804 
<a name="l00805"></a>00805 
<a name="l00821"></a><a class="code" href="class_c_v_calc_parser.html#4faca6a612ecdc863804af33673966b2">00821</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#4faca6a612ecdc863804af33673966b2">CVCalcParser::sum</a>(std::string expr, std::string var, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> low, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> high)
<a name="l00822"></a>00822         <span class="keywordflow">throw</span>(<a class="code" href="class_c_function_not_supported_exception.html">CFunctionNotSupportedException</a>) {
<a name="l00823"></a>00823     <span class="keywordflow">throw</span> <a class="code" href="class_c_function_not_supported_exception.html">CFunctionNotSupportedException</a>(<span class="stringliteral">"sum"</span>, this-&gt;m_iCurrentIndex);
<a name="l00824"></a>00824     <span class="comment">// Supposed behavior :</span>
<a name="l00825"></a>00825     <span class="comment">//    VALUES_TYPE vResult = 0;</span>
<a name="l00826"></a>00826     <span class="comment">//    for (var = low; var &lt; high; var++) {</span>
<a name="l00827"></a>00827     <span class="comment">//        vResult += expr(var);</span>
<a name="l00828"></a>00828     <span class="comment">//    }</span>
<a name="l00829"></a>00829     <span class="keywordflow">return</span> (<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a>)0;
<a name="l00830"></a>00830 }
<a name="l00831"></a>00831 
<a name="l00832"></a>00832 
<a name="l00848"></a><a class="code" href="class_c_v_calc_parser.html#12a524bd18bd4bff5f8cba3dcc308ee7">00848</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#12a524bd18bd4bff5f8cba3dcc308ee7">CVCalcParser::product</a>(std::string expr, std::string var, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> low, <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> high)
<a name="l00849"></a>00849         <span class="keywordflow">throw</span>(<a class="code" href="class_c_function_not_supported_exception.html">CFunctionNotSupportedException</a>) {
<a name="l00850"></a>00850     <span class="keywordflow">throw</span> <a class="code" href="class_c_function_not_supported_exception.html">CFunctionNotSupportedException</a>(<span class="stringliteral">"product"</span>, this-&gt;m_iCurrentIndex);
<a name="l00851"></a>00851     <span class="comment">// Supposed behavior :</span>
<a name="l00852"></a>00852     <span class="comment">//    VALUES_TYPE vResult = 0;</span>
<a name="l00853"></a>00853     <span class="comment">//    for (var = low; var &lt; high; var++) {</span>
<a name="l00854"></a>00854     <span class="comment">//        vResult *= expr(var);</span>
<a name="l00855"></a>00855     <span class="comment">//    }</span>
<a name="l00856"></a>00856     <span class="keywordflow">return</span> (<a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a>)0;
<a name="l00857"></a>00857 }
<a name="l00858"></a>00858 
<a name="l00859"></a>00859 
<a name="l00873"></a><a class="code" href="class_c_v_calc_parser.html#53f8a16035a6f340e8ae6225da3ddaf7">00873</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#53f8a16035a6f340e8ae6225da3ddaf7">CVCalcParser::Evaluate</a>(<span class="keyword">const</span> std::string&amp; strSource)
<a name="l00874"></a>00874         <span class="keywordflow">throw</span>(<a class="code" href="class_c_v_calc_parser_exception.html">CVCalcParserException</a>) {
<a name="l00875"></a>00875     this-&gt;ResetParserMembers(strSource);
<a name="l00876"></a>00876     <span class="keywordflow">try</span> {
<a name="l00877"></a>00877         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valResult = this-&gt;Level_1();
<a name="l00878"></a>00878         <a class="code" href="struct_answer_item.html">AnswerItem</a> AnsItem;
<a name="l00879"></a>00879         AnsItem.<a class="code" href="struct_answer_item.html#238b742ae087701dc27f69ccebcb4b01">m_strFormula</a> = this-&gt;m_strSource;
<a name="l00880"></a>00880         AnsItem.<a class="code" href="struct_answer_item.html#94607e0b2019211fc5fd90da8ac873b3">m_valResult</a>  = valResult;
<a name="l00881"></a>00881         this-&gt;m_dqeAnswersHistory.push_front(AnsItem);
<a name="l00882"></a>00882         <span class="keywordflow">return</span> valResult;
<a name="l00883"></a>00883     }
<a name="l00884"></a>00884     <span class="keywordflow">catch</span> (<a class="code" href="class_c_v_calc_parser_exception.html">CVCalcParserException</a>) {
<a name="l00885"></a>00885         <span class="keywordflow">throw</span>;
<a name="l00886"></a>00886     }
<a name="l00887"></a>00887     <span class="keywordflow">catch</span> (...) {
<a name="l00888"></a>00888         <span class="keywordflow">throw</span> <a class="code" href="class_c_unknown_exception.html">CUnknownException</a>(0);
<a name="l00889"></a>00889     }
<a name="l00890"></a>00890 }
<a name="l00891"></a>00891 
<a name="l00892"></a>00892 
<a name="l00908"></a><a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">00908</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">CVCalcParser::Level_1</a>(<span class="keywordtype">void</span>)
<a name="l00909"></a>00909         throw(<a class="code" href="class_c_v_calc_parser_exception.html">CVCalcParserException</a>) {
<a name="l00910"></a>00910     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valLeftOperand = this-&gt;<a class="code" href="class_c_v_calc_parser.html#bde3aec010778dd4336bc58110bb9e77">Level_2</a>();
<a name="l00911"></a>00911     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
<a name="l00912"></a>00912         <span class="keywordflow">switch</span> (this-&gt;m_tokCurrentToken) {
<a name="l00913"></a>00913         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1bc8f8b372c1d21fc00b409b33069100e1">TV_PLUS</a>:
<a name="l00914"></a>00914             <span class="comment">// Addition : 'expr + expr'</span>
<a name="l00915"></a>00915             valLeftOperand += this-&gt;<a class="code" href="class_c_v_calc_parser.html#bde3aec010778dd4336bc58110bb9e77">Level_2</a>();
<a name="l00916"></a>00916             <span class="keywordflow">break</span>;
<a name="l00917"></a>00917 
<a name="l00918"></a>00918         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b08d7669a85850cf530299aa995e470c3">TV_MINUS</a>:
<a name="l00919"></a>00919             <span class="comment">// Subtraction : 'expr - expr'</span>
<a name="l00920"></a>00920             valLeftOperand -= this-&gt;<a class="code" href="class_c_v_calc_parser.html#bde3aec010778dd4336bc58110bb9e77">Level_2</a>();
<a name="l00921"></a>00921             <span class="keywordflow">break</span>;
<a name="l00922"></a>00922 
<a name="l00923"></a>00923         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b309e5d1b3885dd47b57d0bf8282b6dd1">TV_ASSIGN</a>:
<a name="l00924"></a>00924             <span class="comment">// Assignation : 'expr = expr'</span>
<a name="l00925"></a>00925             <span class="keywordflow">throw</span> <a class="code" href="class_c_literal_assignation_exception.html">CLiteralAssignationException</a>(this-&gt;m_iCurrentIndex);
<a name="l00926"></a>00926 
<a name="l00927"></a>00927         <span class="keywordflow">default</span>:
<a name="l00928"></a>00928             <span class="keywordflow">return</span> valLeftOperand;
<a name="l00929"></a>00929         }
<a name="l00930"></a>00930     }
<a name="l00931"></a>00931 }
<a name="l00932"></a>00932 
<a name="l00933"></a>00933 
<a name="l00951"></a><a class="code" href="class_c_v_calc_parser.html#bde3aec010778dd4336bc58110bb9e77">00951</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#bde3aec010778dd4336bc58110bb9e77">CVCalcParser::Level_2</a>(<span class="keywordtype">void</span>)
<a name="l00952"></a>00952         throw(<a class="code" href="class_c_v_calc_parser_exception.html">CVCalcParserException</a>) {
<a name="l00953"></a>00953     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valLeftOperand = this-&gt;<a class="code" href="class_c_v_calc_parser.html#f8c086f9e10a7e4a9b3cfa49be1c6634">Level_3</a>();
<a name="l00954"></a>00954     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
<a name="l00955"></a>00955         <span class="keywordflow">switch</span> (this-&gt;m_tokCurrentToken) {
<a name="l00956"></a>00956         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b95a48dda0851ef4be2c51aae6e2d4efc">TV_MUL</a>:
<a name="l00957"></a>00957             <span class="comment">// Multiplication : 'expr * expr'</span>
<a name="l00958"></a>00958             valLeftOperand *= this-&gt;<a class="code" href="class_c_v_calc_parser.html#bde3aec010778dd4336bc58110bb9e77">Level_2</a>();
<a name="l00959"></a>00959             <span class="keywordflow">break</span>;
<a name="l00960"></a>00960 
<a name="l00961"></a>00961         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1bf4b308ef5ba5a98a84ac3bdb126d690e">TV_DIV</a>:
<a name="l00962"></a>00962             <span class="comment">// Division : 'expr / expr'</span>
<a name="l00963"></a>00963             {
<a name="l00964"></a>00964                 <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valRightOperand = this-&gt;<a class="code" href="class_c_v_calc_parser.html#bde3aec010778dd4336bc58110bb9e77">Level_2</a>();
<a name="l00965"></a>00965                 <span class="keywordflow">if</span> (valRightOperand != 0.0) {
<a name="l00966"></a>00966                     valLeftOperand /= valRightOperand;
<a name="l00967"></a>00967                 }
<a name="l00968"></a>00968                 <span class="keywordflow">else</span> {
<a name="l00969"></a>00969                     <span class="keywordflow">throw</span> <a class="code" href="class_c_division_by_zero_exception.html">CDivisionByZeroException</a>(this-&gt;m_iCurrentIndex);
<a name="l00970"></a>00970                 }
<a name="l00971"></a>00971             }
<a name="l00972"></a>00972             <span class="keywordflow">break</span>;
<a name="l00973"></a>00973 
<a name="l00974"></a>00974         <span class="keywordflow">default</span>:
<a name="l00975"></a>00975             <span class="keywordflow">return</span> valLeftOperand;
<a name="l00976"></a>00976         }
<a name="l00977"></a>00977     }
<a name="l00978"></a>00978 }
<a name="l00979"></a>00979 
<a name="l00980"></a>00980 
<a name="l00999"></a><a class="code" href="class_c_v_calc_parser.html#f8c086f9e10a7e4a9b3cfa49be1c6634">00999</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#f8c086f9e10a7e4a9b3cfa49be1c6634">CVCalcParser::Level_3</a>(<span class="keywordtype">void</span>)
<a name="l01000"></a>01000         throw(<a class="code" href="class_c_v_calc_parser_exception.html">CVCalcParserException</a>) {
<a name="l01001"></a>01001     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valLeftOperand = this-&gt;<a class="code" href="class_c_v_calc_parser.html#a182baf0ad51a7c63957a0ea113c12c9">Level_4</a>();
<a name="l01002"></a>01002     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
<a name="l01003"></a>01003         <span class="keywordflow">switch</span>(this-&gt;<a class="code" href="class_c_v_calc_parser.html#a0623aa02da54819cf4100ba7719dae9">m_tokCurrentToken</a>) {
<a name="l01004"></a>01004         <span class="keywordflow">case</span> TV_POW:
<a name="l01005"></a>01005             <span class="comment">// Power : 'expr ^ expr'</span>
<a name="l01006"></a>01006             valLeftOperand = this-&gt;pow(valLeftOperand, this-&gt;Level_3());
<a name="l01007"></a>01007             <span class="keywordflow">break</span>;
<a name="l01008"></a>01008 
<a name="l01009"></a>01009         <span class="keywordflow">default</span>:
<a name="l01010"></a>01010             <span class="keywordflow">return</span> valLeftOperand;
<a name="l01011"></a>01011         }
<a name="l01012"></a>01012     }
<a name="l01013"></a>01013 }
<a name="l01014"></a>01014 
<a name="l01015"></a>01015 
<a name="l01034"></a><a class="code" href="class_c_v_calc_parser.html#a182baf0ad51a7c63957a0ea113c12c9">01034</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#a182baf0ad51a7c63957a0ea113c12c9">CVCalcParser::Level_4</a>(<span class="keywordtype">void</span>)
<a name="l01035"></a>01035         <span class="keywordflow">throw</span>(CVCalcParserException) {
<a name="l01036"></a>01036     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valLeftOperand = this-&gt;Level_5();
<a name="l01037"></a>01037     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
<a name="l01038"></a>01038         <span class="keywordflow">switch</span> (this-&gt;m_tokCurrentToken) {
<a name="l01039"></a>01039         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b38c8eed39f1ca29ef23333f3de8c9ca7">TV_MOD</a>:
<a name="l01040"></a>01040             <span class="comment">// Modulus : 'expr % expr'</span>
<a name="l01041"></a>01041             valLeftOperand = this-&gt;<a class="code" href="class_c_v_calc_parser.html#1e7a02838976ed64a7c3749822270c3a">mod</a>(valLeftOperand, this-&gt;Level_3());
<a name="l01042"></a>01042             <span class="keywordflow">break</span>;
<a name="l01043"></a>01043 
<a name="l01044"></a>01044         <span class="keywordflow">default</span>:
<a name="l01045"></a>01045             <span class="keywordflow">return</span> valLeftOperand;
<a name="l01046"></a>01046         }
<a name="l01047"></a>01047     }
<a name="l01048"></a>01048 }
<a name="l01049"></a>01049 
<a name="l01050"></a>01050 
<a name="l01073"></a><a class="code" href="class_c_v_calc_parser.html#d0ec6c12e48049b31768d9322da0540e">01073</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#d0ec6c12e48049b31768d9322da0540e">CVCalcParser::Level_5</a>(<span class="keywordtype">void</span>)
<a name="l01074"></a>01074         <span class="keywordflow">throw</span>(CVCalcParserException) {
<a name="l01075"></a>01075     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valLeftOperand = this-&gt;Primary();
<a name="l01076"></a>01076     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
<a name="l01077"></a>01077         <span class="keywordflow">switch</span> (this-&gt;m_tokCurrentToken) {
<a name="l01078"></a>01078         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b887a188d6195a91e82411893afbdff24">TV_NUMBER</a>:
<a name="l01079"></a>01079             this-&gt;<a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">GetToken</a>();
<a name="l01080"></a>01080             <span class="keywordflow">break</span>;
<a name="l01081"></a>01081 
<a name="l01082"></a>01082         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b1fa99afdfbdb0df8e7818b483b7f132e">TV_FACT</a>:
<a name="l01083"></a>01083             <span class="comment">// Factorial : 'expr !'</span>
<a name="l01084"></a>01084             this-&gt;<a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">GetToken</a>();
<a name="l01085"></a>01085             valLeftOperand = this-&gt;<a class="code" href="class_c_v_calc_parser.html#ac4f8ba7577444b9dc8f3fd7e1ef999d">ffactor</a>(valLeftOperand);
<a name="l01086"></a>01086             <span class="keywordflow">break</span>;
<a name="l01087"></a>01087 
<a name="l01088"></a>01088         <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1bab51e45caf0ee25d915cef9f61d0be89">TV_DEG</a>:
<a name="l01089"></a>01089             <span class="comment">// Degree to radian : 'expr�'</span>
<a name="l01090"></a>01090             this-&gt;<a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">GetToken</a>();
<a name="l01091"></a>01091             valLeftOperand = this-&gt;<a class="code" href="class_c_v_calc_parser.html#223e308cab7c1c8f3ed754f6a8bc6984">rad</a>(valLeftOperand);
<a name="l01092"></a>01092             <span class="keywordflow">break</span>;
<a name="l01093"></a>01093 
<a name="l01094"></a>01094         <span class="keywordflow">default</span>:
<a name="l01095"></a>01095             <span class="keywordflow">return</span> valLeftOperand;
<a name="l01096"></a>01096         }
<a name="l01097"></a>01097     }
<a name="l01098"></a>01098 }
<a name="l01099"></a>01099 
<a name="l01100"></a>01100 
<a name="l01129"></a><a class="code" href="class_c_v_calc_parser.html#1c323050e22744da030a014a861e03a4">01129</a> <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> <a class="code" href="class_c_v_calc_parser.html#1c323050e22744da030a014a861e03a4">CVCalcParser::Primary</a>(<span class="keywordtype">void</span>)
<a name="l01130"></a>01130         throw(CVCalcParserException) {
<a name="l01131"></a>01131     this-&gt;<a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">GetToken</a>();
<a name="l01132"></a>01132     <span class="keywordflow">switch</span> (this-&gt;m_tokCurrentToken) {
<a name="l01133"></a>01133     <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b887a188d6195a91e82411893afbdff24">TV_NUMBER</a>:
<a name="l01134"></a>01134         <span class="keywordflow">return</span> this-&gt;<a class="code" href="class_c_v_calc_parser.html#2f571d7c799e8857aad7fddb011359e5">m_valNumberValue</a>;
<a name="l01135"></a>01135 
<a name="l01136"></a>01136     <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b4e0c2f8ef0750e35c5f47bd6a36391e2">TV_IDENTIFIER</a>:
<a name="l01137"></a>01137         {
<a name="l01138"></a>01138             std::string strIdentifierName = this-&gt;<a class="code" href="class_c_v_calc_parser.html#0b3296194cfbc37bb2b5bddbecab2a5d">m_strIdentifierValue</a>;
<a name="l01139"></a>01139             std::list&lt;std::string&gt;::iterator IterList =
<a name="l01140"></a>01140                 std::find(this-&gt;m_lstFunctions.begin(),
<a name="l01141"></a>01141                           this-&gt;<a class="code" href="class_c_v_calc_parser.html#e57f128cfa2e581a977eb0af4bd2c0a1">m_lstFunctions</a>.end(),
<a name="l01142"></a>01142                           strIdentifierName
<a name="l01143"></a>01143                          );
<a name="l01144"></a>01144             <span class="keywordflow">if</span> (IterList != this-&gt;m_lstFunctions.end()) {
<a name="l01145"></a>01145                 <span class="comment">// The identifier is a function name</span>
<a name="l01146"></a>01146                 <span class="keywordflow">if</span> (this-&gt;GetToken() != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b2ee4d22532f74dca90d62588fe798ac3">TV_LP</a>) {
<a name="l01147"></a>01147                     <span class="keywordflow">throw</span> <a class="code" href="class_c_illegal_use_of_fonction_name_exception.html">CIllegalUseOfFonctionNameException</a>(strIdentifierName, this-&gt;m_iCurrentIndex);
<a name="l01148"></a>01148                 }
<a name="l01149"></a>01149                 <span class="keywordflow">else</span> {
<a name="l01150"></a>01150                     <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valFunctionResult = 0.0;
<a name="l01151"></a>01151                     <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"abs"</span>) {
<a name="l01152"></a>01152                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#be249590e704ae956317cdfeddfcf2b1">abs</a>(this-&gt;Level_1());
<a name="l01153"></a>01153                     }
<a name="l01154"></a>01154                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"Acos"</span>) {
<a name="l01155"></a>01155                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#dd053deefb9c5b003703a6659c598946">Acos</a>(this-&gt;Level_1());
<a name="l01156"></a>01156                     }
<a name="l01157"></a>01157                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"Ans"</span>) {
<a name="l01158"></a>01158                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#217b97a3398d351cf3823bb3d8feef26">Ans</a>(this-&gt;Level_1()).m_valResult;
<a name="l01159"></a>01159                     }
<a name="l01160"></a>01160                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"Asin"</span>) {
<a name="l01161"></a>01161                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#4dd2bd839beb8986f034dca7e687d29f">Asin</a>(this-&gt;Level_1());
<a name="l01162"></a>01162                     }
<a name="l01163"></a>01163                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"Atan"</span>) {
<a name="l01164"></a>01164                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#28e75fc1e44eb3c4438256d392ea2fc9">Atan</a>(this-&gt;Level_1());
<a name="l01165"></a>01165                     }
<a name="l01166"></a>01166                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"cos"</span>) {
<a name="l01167"></a>01167                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#a066fc0d8e21cf8854823cb6c63adb56">cos</a>(this-&gt;Level_1());
<a name="l01168"></a>01168                     }
<a name="l01169"></a>01169                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"cosh"</span>) {
<a name="l01170"></a>01170                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#460a276dbda929bce5dcff28c49e4a37">cosh</a>(this-&gt;Level_1());
<a name="l01171"></a>01171                     }
<a name="l01172"></a>01172                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"deg"</span>) {
<a name="l01173"></a>01173                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#d4ab77a9c36608751a5c362dae6d8813">deg</a>(this-&gt;Level_1());
<a name="l01174"></a>01174                     }
<a name="l01175"></a>01175                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"exp"</span>) {
<a name="l01176"></a>01176                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#fe89dd21dcf2cd8d75d3c6d92196ded6">exp</a>(this-&gt;Level_1());
<a name="l01177"></a>01177                     }
<a name="l01178"></a>01178                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"ln"</span>) {
<a name="l01179"></a>01179                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#d992912845097e4bb9e6cee3c81a7482">ln</a>(this-&gt;Level_1());
<a name="l01180"></a>01180                     }
<a name="l01181"></a>01181                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"log"</span>) {
<a name="l01182"></a>01182                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#4331a778a55adebb9a49d3203b761310">log</a>(this-&gt;Level_1());
<a name="l01183"></a>01183                     }
<a name="l01184"></a>01184                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"logn"</span>) {
<a name="l01185"></a>01185                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valFirstParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01186"></a>01186                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01187"></a>01187                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01188"></a>01188                         }
<a name="l01189"></a>01189                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#417f1f76518ff1693a839712f443fa0a">logn</a>(valFirstParameter, this-&gt;Level_1());
<a name="l01190"></a>01190                     }
<a name="l01191"></a>01191                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"nAp"</span>) {
<a name="l01192"></a>01192                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valFirstParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01193"></a>01193                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01194"></a>01194                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01195"></a>01195                         }
<a name="l01196"></a>01196                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#8f5e1a27fee1e8aea82de140cd8fc839">nAp</a>(valFirstParameter, this-&gt;Level_1());
<a name="l01197"></a>01197                     }
<a name="l01198"></a>01198                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"nCp"</span>) {
<a name="l01199"></a>01199                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valFirstParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01200"></a>01200                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01201"></a>01201                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01202"></a>01202                         }
<a name="l01203"></a>01203                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#d419513e44bde20cbe781aebc38e49d8">nCp</a>(valFirstParameter, this-&gt;Level_1());
<a name="l01204"></a>01204                     }
<a name="l01205"></a>01205                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"product"</span>) {
<a name="l01206"></a>01206                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valFirstParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01207"></a>01207                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01208"></a>01208                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01209"></a>01209                         }
<a name="l01210"></a>01210                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valSecondParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01211"></a>01211                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01212"></a>01212                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01213"></a>01213                         }
<a name="l01214"></a>01214                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valThirdParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01215"></a>01215                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01216"></a>01216                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01217"></a>01217                         }
<a name="l01218"></a>01218                         
<a name="l01219"></a>01219                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#12a524bd18bd4bff5f8cba3dcc308ee7">product</a>(<span class="stringliteral">""</span>,
<a name="l01220"></a>01220                                                           <span class="stringliteral">""</span>,
<a name="l01221"></a>01221                                                           valThirdParameter,
<a name="l01222"></a>01222                                                           this-&gt;Level_1());
<a name="l01223"></a>01223                     }
<a name="l01224"></a>01224                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"rad"</span>) {
<a name="l01225"></a>01225                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#223e308cab7c1c8f3ed754f6a8bc6984">rad</a>(this-&gt;Level_1());
<a name="l01226"></a>01226                     }
<a name="l01227"></a>01227                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"sin"</span>) {
<a name="l01228"></a>01228                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#ccdc395b4777fe75b7aad79ec188868b">sin</a>(this-&gt;Level_1());
<a name="l01229"></a>01229                     }
<a name="l01230"></a>01230                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"sinh"</span>) {
<a name="l01231"></a>01231                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#d080f9fdcdd1d06022b6206429fe260e">sinh</a>(this-&gt;Level_1());
<a name="l01232"></a>01232                     }
<a name="l01233"></a>01233                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"sqrt"</span>) {
<a name="l01234"></a>01234                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#d80f90e6ebeeadde59f6d64290480062">sqrt</a>(this-&gt;Level_1());
<a name="l01235"></a>01235                     }
<a name="l01236"></a>01236                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"sqrtn"</span>) {
<a name="l01237"></a>01237                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valFirstParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01238"></a>01238                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01239"></a>01239                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01240"></a>01240                         }
<a name="l01241"></a>01241                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#99566824e2739113c77413beb0a92645">sqrtn</a>(valFirstParameter, this-&gt;Level_1());
<a name="l01242"></a>01242                     }
<a name="l01243"></a>01243                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"sum"</span>) {
<a name="l01244"></a>01244                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valFirstParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01245"></a>01245                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01246"></a>01246                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01247"></a>01247                         }
<a name="l01248"></a>01248                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valSecondParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01249"></a>01249                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01250"></a>01250                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01251"></a>01251                         }
<a name="l01252"></a>01252                         <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valThirdParameter = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01253"></a>01253                         <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01254"></a>01254                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_few_parameters_exception.html">CTooFewParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01255"></a>01255                         }
<a name="l01256"></a>01256                         
<a name="l01257"></a>01257                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#4faca6a612ecdc863804af33673966b2">sum</a>(<span class="stringliteral">""</span>,
<a name="l01258"></a>01258                                                       <span class="stringliteral">""</span>,
<a name="l01259"></a>01259                                                       valThirdParameter,
<a name="l01260"></a>01260                                                       this-&gt;Level_1());
<a name="l01261"></a>01261                     }
<a name="l01262"></a>01262                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"tan"</span>) {
<a name="l01263"></a>01263                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#41040fcd49f23a12d66e81ab8d29ec09">tan</a>(this-&gt;Level_1());
<a name="l01264"></a>01264                     }
<a name="l01265"></a>01265                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strIdentifierName == <span class="stringliteral">"tanh"</span>) {
<a name="l01266"></a>01266                         valFunctionResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#d0cb912f3527dbee24318528ab8823f0">tanh</a>(this-&gt;Level_1());
<a name="l01267"></a>01267                     }
<a name="l01268"></a>01268                     <span class="keywordflow">else</span> {
<a name="l01269"></a>01269                         <span class="keywordflow">throw</span> <a class="code" href="class_c_unknown_function_called_exception.html">CUnknownFunctionCalledException</a>(strIdentifierName, this-&gt;m_iCurrentIndex);
<a name="l01270"></a>01270                     }
<a name="l01271"></a>01271                     <span class="keywordflow">if</span> (<a class="code" href="class_c_v_calc_parser.html#a0623aa02da54819cf4100ba7719dae9">m_tokCurrentToken</a> != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b6f101ce61dce4e614442df82e7e9acd1">TV_RP</a>) {
<a name="l01272"></a>01272                         <span class="keywordflow">if</span> (<a class="code" href="class_c_v_calc_parser.html#a0623aa02da54819cf4100ba7719dae9">m_tokCurrentToken</a> == <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3ff810da13056b98fb924eaa920960c7">TV_SEQ</a>) {
<a name="l01273"></a>01273                             <span class="keywordflow">throw</span> <a class="code" href="class_c_too_many_parameters_exception.html">CTooManyParametersException</a>(this-&gt;m_iCurrentIndex);
<a name="l01274"></a>01274                         }
<a name="l01275"></a>01275                         <span class="keywordflow">else</span> {
<a name="l01276"></a>01276                             <span class="keywordflow">throw</span> <a class="code" href="class_c_closing_parenthesis_expected_exception.html">CClosingParenthesisExpectedException</a>(this-&gt;m_iCurrentIndex);
<a name="l01277"></a>01277                         }
<a name="l01278"></a>01278                     }
<a name="l01279"></a>01279                     this-&gt;<a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">GetToken</a>();
<a name="l01280"></a>01280                     <span class="keywordflow">return</span> valFunctionResult;
<a name="l01281"></a>01281                 }
<a name="l01282"></a>01282             }
<a name="l01283"></a>01283             <span class="keywordflow">else</span> {
<a name="l01284"></a>01284                 <span class="comment">// The identifier is not a function name but a user-defined variable</span>
<a name="l01285"></a>01285                 this-&gt;<a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">GetToken</a>();
<a name="l01286"></a>01286                 <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken == <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b2ee4d22532f74dca90d62588fe798ac3">TV_LP</a>) {
<a name="l01287"></a>01287                     <span class="keywordflow">if</span> (this-&gt;m_mapVariables.find(strIdentifierName) == this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>.end()) {
<a name="l01288"></a>01288                         <span class="comment">// The identifier isn't either a variable and is</span>
<a name="l01289"></a>01289                         <span class="comment">//   called like a function, with a '()' operator.</span>
<a name="l01290"></a>01290                         <span class="keywordflow">throw</span> <a class="code" href="class_c_unknown_function_called_exception.html">CUnknownFunctionCalledException</a>(strIdentifierName, this-&gt;m_iCurrentIndex);
<a name="l01291"></a>01291                     }
<a name="l01292"></a>01292                     <span class="keywordflow">else</span> {
<a name="l01293"></a>01293                         <span class="comment">// The variable exists but is called like</span>
<a name="l01294"></a>01294                         <span class="comment">//   a function, with a '()' operator.</span>
<a name="l01295"></a>01295                         <span class="keywordflow">throw</span> <a class="code" href="class_c_implicit_multiplication_exception.html">CImplicitMultiplicationException</a>(strIdentifierName, this-&gt;m_iCurrentIndex);
<a name="l01296"></a>01296                     }
<a name="l01297"></a>01297                 }
<a name="l01298"></a>01298                 
<a name="l01299"></a>01299                 <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valResult = 0.0;
<a name="l01300"></a>01300                 <span class="comment">// The user assigns a value to the variable</span>
<a name="l01301"></a>01301                 <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken == <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b309e5d1b3885dd47b57d0bf8282b6dd1">TV_ASSIGN</a>) {
<a name="l01302"></a>01302                     <span class="keywordflow">if</span> ((strIdentifierName == <span class="stringliteral">"pi"</span>) || (strIdentifierName == <span class="stringliteral">"e"</span>)) {
<a name="l01303"></a>01303                         <span class="keywordflow">throw</span> <a class="code" href="class_c_constant_assignation_exception.html">CConstantAssignationException</a>(strIdentifierName, this-&gt;m_iCurrentIndex);
<a name="l01304"></a>01304                     }
<a name="l01305"></a>01305                     valResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01306"></a>01306                     <span class="comment">// Adds the variable in the map if not existing yet</span>
<a name="l01307"></a>01307                     this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>[strIdentifierName] = valResult;
<a name="l01308"></a>01308                 }
<a name="l01309"></a>01309                 <span class="keywordflow">else</span> {
<a name="l01310"></a>01310                     <span class="comment">// The identifier is neither a function nor a variable</span>
<a name="l01311"></a>01311                     <span class="keywordflow">if</span> (this-&gt;m_mapVariables.find(strIdentifierName) == this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>.end()) {
<a name="l01312"></a>01312                         <span class="keywordflow">throw</span> <a class="code" href="class_c_undefined_variable_exception.html">CUndefinedVariableException</a>(strIdentifierName, this-&gt;m_iCurrentIndex);
<a name="l01313"></a>01313                     }
<a name="l01314"></a>01314                     valResult = this-&gt;<a class="code" href="class_c_v_calc_parser.html#9fb631992c6d02e5db9b29fa03765d05">m_mapVariables</a>[strIdentifierName];
<a name="l01315"></a>01315                 }
<a name="l01316"></a>01316                 <span class="keywordflow">return</span> valResult;
<a name="l01317"></a>01317             }
<a name="l01318"></a>01318         }
<a name="l01319"></a>01319         <span class="keywordflow">break</span>;
<a name="l01320"></a>01320 
<a name="l01321"></a>01321     <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1bc8f8b372c1d21fc00b409b33069100e1">TV_PLUS</a>:
<a name="l01322"></a>01322         <span class="comment">// Unary Plus '+expr'</span>
<a name="l01323"></a>01323         <span class="keywordflow">return</span> this-&gt;<a class="code" href="class_c_v_calc_parser.html#1c323050e22744da030a014a861e03a4">Primary</a>();
<a name="l01324"></a>01324 
<a name="l01325"></a>01325     <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b08d7669a85850cf530299aa995e470c3">TV_MINUS</a>:
<a name="l01326"></a>01326         <span class="comment">// Unary Minus '-expr'</span>
<a name="l01327"></a>01327         <span class="keywordflow">return</span> -1 * this-&gt;<a class="code" href="class_c_v_calc_parser.html#1c323050e22744da030a014a861e03a4">Primary</a>();
<a name="l01328"></a>01328 
<a name="l01329"></a>01329     <span class="keywordflow">case</span> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b2ee4d22532f74dca90d62588fe798ac3">TV_LP</a>:
<a name="l01330"></a>01330         <span class="comment">// Opening parenthesis '('</span>
<a name="l01331"></a>01331         {
<a name="l01332"></a>01332             <a class="code" href="_v_calc_parser_types_8h.html#4f8f973df1d3250e3882077b1a157e12">VALUES_TYPE</a> valExpression = this-&gt;<a class="code" href="class_c_v_calc_parser.html#cc210c2429fffad4700dbec2789ce90d">Level_1</a>();
<a name="l01333"></a>01333             <span class="keywordflow">if</span> (this-&gt;m_tokCurrentToken != <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b6f101ce61dce4e614442df82e7e9acd1">TV_RP</a>) {
<a name="l01334"></a>01334                 <span class="keywordflow">throw</span> <a class="code" href="class_c_closing_parenthesis_expected_exception.html">CClosingParenthesisExpectedException</a>(this-&gt;m_iCurrentIndex);
<a name="l01335"></a>01335             }
<a name="l01336"></a>01336             this-&gt;<a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">GetToken</a>();
<a name="l01337"></a>01337             <span class="keywordflow">return</span> valExpression;
<a name="l01338"></a>01338         }
<a name="l01339"></a>01339 
<a name="l01340"></a>01340     <span class="keywordflow">default</span>:
<a name="l01341"></a>01341         <span class="keywordflow">throw</span> <a class="code" href="class_c_mathematic_expression_expected_exception.html">CMathematicExpressionExpectedException</a>(this-&gt;m_iCurrentIndex);
<a name="l01342"></a>01342     }
<a name="l01343"></a>01343 }
<a name="l01344"></a>01344 
<a name="l01345"></a>01345 
<a name="l01370"></a><a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">01370</a> <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b">TokenValue</a> <a class="code" href="class_c_v_calc_parser.html#5593665eab9b19f0eec6a62e4e50d3a5">CVCalcParser::GetToken</a>(<span class="keywordtype">void</span>)
<a name="l01371"></a>01371         throw(CVCalcParserException) {
<a name="l01372"></a>01372     <span class="keywordflow">if</span> (this-&gt;m_strSource.empty()) {
<a name="l01373"></a>01373         <span class="keywordflow">return</span> this-&gt;m_tokCurrentToken = <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3bca2c7b3b6a043183c50e11e7f4b534">TV_END</a>;
<a name="l01374"></a>01374     }
<a name="l01375"></a>01375     <span class="keywordflow">if</span> (this-&gt;m_bEndEncountered) {
<a name="l01376"></a>01376         <span class="keywordflow">return</span> this-&gt;m_tokCurrentToken = <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3bca2c7b3b6a043183c50e11e7f4b534">TV_END</a>;
<a name="l01377"></a>01377     }
<a name="l01378"></a>01378     <span class="comment">// Eats the white spaces...</span>
<a name="l01379"></a>01379     <span class="keywordflow">while</span> (::isspace(this-&gt;m_strSource[this-&gt;m_iCurrentIndex])) {
<a name="l01380"></a>01380         <span class="keywordflow">if</span> (this-&gt;m_iCurrentIndex &lt;= this-&gt;m_strSource.length()-1) {
<a name="l01381"></a>01381             <span class="keywordflow">if</span> (this-&gt;StepIndexForward()) {
<a name="l01382"></a>01382                 <span class="keywordflow">return</span> this-&gt;m_tokCurrentToken = <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3bca2c7b3b6a043183c50e11e7f4b534">TV_END</a>;
<a name="l01383"></a>01383             }
<a name="l01384"></a>01384         }
<a name="l01385"></a>01385         <span class="comment">/*</span>
<a name="l01386"></a>01386 <span class="comment">        else {</span>
<a name="l01387"></a>01387 <span class="comment">            return m_tokCurrentToken = TV_END;</span>
<a name="l01388"></a>01388 <span class="comment">        }</span>
<a name="l01389"></a>01389 <span class="comment">        */</span>
<a name="l01390"></a>01390     }
<a name="l01391"></a>01391     <span class="keywordtype">char</span> ch = this-&gt;m_strSource[m_iCurrentIndex];
<a name="l01392"></a>01392     this-&gt;StepIndexForward();
<a name="l01393"></a>01393     <span class="keywordflow">switch</span> (ch) {
<a name="l01394"></a>01394     <span class="keywordflow">case</span> <span class="charliteral">'\0'</span>:
<a name="l01395"></a>01395     <span class="keywordflow">case</span> <span class="charliteral">';'</span>:
<a name="l01396"></a>01396         <span class="comment">// End of the expression</span>
<a name="l01397"></a>01397         <span class="keywordflow">return</span> this-&gt;m_tokCurrentToken = <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3bca2c7b3b6a043183c50e11e7f4b534">TV_END</a>;
<a name="l01398"></a>01398 
<a name="l01399"></a>01399     <span class="keywordflow">case</span> <span class="charliteral">','</span>:
<a name="l01400"></a>01400     <span class="keywordflow">case</span> <span class="charliteral">'*'</span>:
<a name="l01401"></a>01401     <span class="keywordflow">case</span> <span class="charliteral">'/'</span>:
<a name="l01402"></a>01402     <span class="keywordflow">case</span> <span class="charliteral">'+'</span>:
<a name="l01403"></a>01403     <span class="keywordflow">case</span> <span class="charliteral">'-'</span>:
<a name="l01404"></a>01404     <span class="keywordflow">case</span> <span class="charliteral">'^'</span>:
<a name="l01405"></a>01405     <span class="keywordflow">case</span> <span class="charliteral">'%'</span>:
<a name="l01406"></a>01406     <span class="keywordflow">case</span> <span class="charliteral">'!'</span>:
<a name="l01407"></a>01407     <span class="keywordflow">case</span> <span class="charliteral">'�'</span>:
<a name="l01408"></a>01408     <span class="keywordflow">case</span> <span class="charliteral">'('</span>:
<a name="l01409"></a>01409     <span class="keywordflow">case</span> <span class="charliteral">')'</span>:
<a name="l01410"></a>01410     <span class="keywordflow">case</span> <span class="charliteral">'='</span>:
<a name="l01411"></a>01411         <span class="comment">// A token is found on the input stream</span>
<a name="l01412"></a>01412         <span class="keywordflow">return</span> this-&gt;m_tokCurrentToken = (<a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b">TokenValue</a>)ch;
<a name="l01413"></a>01413         
<a name="l01414"></a>01414     <span class="keywordflow">case</span> <span class="charliteral">'.'</span>:
<a name="l01415"></a>01415     <span class="keywordflow">case</span> <span class="charliteral">'0'</span>:
<a name="l01416"></a>01416     <span class="keywordflow">case</span> <span class="charliteral">'1'</span>:
<a name="l01417"></a>01417     <span class="keywordflow">case</span> <span class="charliteral">'2'</span>:
<a name="l01418"></a>01418     <span class="keywordflow">case</span> <span class="charliteral">'3'</span>:
<a name="l01419"></a>01419     <span class="keywordflow">case</span> <span class="charliteral">'4'</span>:
<a name="l01420"></a>01420     <span class="keywordflow">case</span> <span class="charliteral">'5'</span>:
<a name="l01421"></a>01421     <span class="keywordflow">case</span> <span class="charliteral">'6'</span>:
<a name="l01422"></a>01422     <span class="keywordflow">case</span> <span class="charliteral">'7'</span>:
<a name="l01423"></a>01423     <span class="keywordflow">case</span> <span class="charliteral">'8'</span>:
<a name="l01424"></a>01424     <span class="keywordflow">case</span> <span class="charliteral">'9'</span>:
<a name="l01425"></a>01425         <span class="comment">// A digit is found on the input stream...</span>
<a name="l01426"></a>01426         {
<a name="l01427"></a>01427             <span class="keywordtype">int</span> iStartPos = this-&gt;m_iCurrentIndex - 1;
<a name="l01428"></a>01428             if (!this-&gt;m_bEndEncountered) {
<a name="l01429"></a>01429                 <span class="comment">// A valid number must contain at most one period ('.')</span>
<a name="l01430"></a>01430                 <span class="keywordtype">bool</span> bDotAlreadyThere = ( (this-&gt;m_strSource[iStartPos] == <span class="charliteral">'.'</span>) ? <span class="keyword">true</span> : <span class="keyword">false</span> );
<a name="l01431"></a>01431                 <span class="keywordflow">while</span> ( (!this-&gt;m_bEndEncountered) &amp;&amp;
<a name="l01432"></a>01432                         ((::isdigit(this-&gt;m_strSource[this-&gt;m_iCurrentIndex])) ||
<a name="l01433"></a>01433                          (this-&gt;m_strSource[this-&gt;m_iCurrentIndex] == <span class="charliteral">'.'</span>)) ) {
<a name="l01434"></a>01434                     <span class="keywordflow">if</span> (this-&gt;m_strSource[m_iCurrentIndex] == <span class="charliteral">'.'</span>) {
<a name="l01435"></a>01435                         <span class="keywordflow">if</span> (bDotAlreadyThere) {
<a name="l01436"></a>01436                             <span class="keywordflow">throw</span> <a class="code" href="class_c_period_unexpected_exception.html">CPeriodUnexpectedException</a>(this-&gt;m_iCurrentIndex);
<a name="l01437"></a>01437                         }
<a name="l01438"></a>01438                         <span class="keywordflow">else</span> {
<a name="l01439"></a>01439                             bDotAlreadyThere = <span class="keyword">true</span>;
<a name="l01440"></a>01440                         }
<a name="l01441"></a>01441                     }
<a name="l01442"></a>01442                     <span class="keywordflow">if</span> (this-&gt;StepIndexForward()) {
<a name="l01443"></a>01443                         <span class="keywordflow">break</span>;
<a name="l01444"></a>01444                     }
<a name="l01445"></a>01445                 }
<a name="l01446"></a>01446             }
<a name="l01447"></a>01447             <span class="comment">// Extracts all the digits which compound the number</span>
<a name="l01448"></a>01448             <span class="keyword">const</span> std::string strNumber = this-&gt;m_strSource.substr  (iStartPos,
<a name="l01449"></a>01449                                                                      (this-&gt;m_iCurrentIndex - iStartPos)
<a name="l01450"></a>01450                                                                     ).c_str();
<a name="l01451"></a>01451             <span class="keyword">const</span> <span class="keywordtype">char</span>* pszStrNumber = strNumber.c_str();
<a name="l01452"></a>01452             this-&gt;m_valNumberValue = ::atof(pszStrNumber);
<a name="l01453"></a>01453             <span class="keywordflow">return</span> this-&gt;m_tokCurrentToken = <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b887a188d6195a91e82411893afbdff24">TV_NUMBER</a>;
<a name="l01454"></a>01454         }
<a name="l01455"></a>01455 
<a name="l01456"></a>01456     <span class="keywordflow">case</span> <span class="charliteral">'_'</span>:
<a name="l01457"></a>01457     <span class="keywordflow">case</span> <span class="charliteral">'a'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'A'</span>:
<a name="l01458"></a>01458     <span class="keywordflow">case</span> <span class="charliteral">'b'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'B'</span>:
<a name="l01459"></a>01459     <span class="keywordflow">case</span> <span class="charliteral">'c'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'C'</span>:
<a name="l01460"></a>01460     <span class="keywordflow">case</span> <span class="charliteral">'d'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'D'</span>:
<a name="l01461"></a>01461     <span class="keywordflow">case</span> <span class="charliteral">'e'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'E'</span>:
<a name="l01462"></a>01462     <span class="keywordflow">case</span> <span class="charliteral">'f'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'F'</span>:
<a name="l01463"></a>01463     <span class="keywordflow">case</span> <span class="charliteral">'g'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'G'</span>:
<a name="l01464"></a>01464     <span class="keywordflow">case</span> <span class="charliteral">'h'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'H'</span>:
<a name="l01465"></a>01465     <span class="keywordflow">case</span> <span class="charliteral">'i'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'I'</span>:
<a name="l01466"></a>01466     <span class="keywordflow">case</span> <span class="charliteral">'j'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'J'</span>:
<a name="l01467"></a>01467     <span class="keywordflow">case</span> <span class="charliteral">'k'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'K'</span>:
<a name="l01468"></a>01468     <span class="keywordflow">case</span> <span class="charliteral">'l'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'L'</span>:
<a name="l01469"></a>01469     <span class="keywordflow">case</span> <span class="charliteral">'m'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'M'</span>:
<a name="l01470"></a>01470     <span class="keywordflow">case</span> <span class="charliteral">'n'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'N'</span>:
<a name="l01471"></a>01471     <span class="keywordflow">case</span> <span class="charliteral">'o'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'O'</span>:
<a name="l01472"></a>01472     <span class="keywordflow">case</span> <span class="charliteral">'p'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'P'</span>:
<a name="l01473"></a>01473     <span class="keywordflow">case</span> <span class="charliteral">'q'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'Q'</span>:
<a name="l01474"></a>01474     <span class="keywordflow">case</span> <span class="charliteral">'r'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'R'</span>:
<a name="l01475"></a>01475     <span class="keywordflow">case</span> <span class="charliteral">'s'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'S'</span>:
<a name="l01476"></a>01476     <span class="keywordflow">case</span> <span class="charliteral">'t'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'T'</span>:
<a name="l01477"></a>01477     <span class="keywordflow">case</span> <span class="charliteral">'u'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'U'</span>:
<a name="l01478"></a>01478     <span class="keywordflow">case</span> <span class="charliteral">'v'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'V'</span>:
<a name="l01479"></a>01479     <span class="keywordflow">case</span> <span class="charliteral">'w'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'W'</span>:
<a name="l01480"></a>01480     <span class="keywordflow">case</span> <span class="charliteral">'x'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'X'</span>:
<a name="l01481"></a>01481     <span class="keywordflow">case</span> <span class="charliteral">'y'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'Y'</span>:
<a name="l01482"></a>01482     <span class="keywordflow">case</span> <span class="charliteral">'z'</span>:   <span class="keywordflow">case</span> <span class="charliteral">'Z'</span>:
<a name="l01483"></a>01483         <span class="comment">// A letter is found on the input stream...</span>
<a name="l01484"></a>01484         {
<a name="l01485"></a>01485             <span class="keywordtype">int</span> iStartPos = this-&gt;m_iCurrentIndex - 1;
<a name="l01486"></a>01486             <span class="keywordflow">if</span> (!this-&gt;m_bEndEncountered) {
<a name="l01487"></a>01487                 <span class="keywordflow">while</span> ( (!this-&gt;m_bEndEncountered) &amp;&amp;
<a name="l01488"></a>01488                         ((::isalnum(this-&gt;m_strSource[this-&gt;m_iCurrentIndex])) ||
<a name="l01489"></a>01489                          (this-&gt;m_strSource[this-&gt;m_iCurrentIndex] == <span class="charliteral">'_'</span>)) ) {
<a name="l01490"></a>01490                     <span class="keywordflow">if</span> (this-&gt;StepIndexForward()) {
<a name="l01491"></a>01491                         <span class="keywordflow">break</span>;
<a name="l01492"></a>01492                     }
<a name="l01493"></a>01493                 }
<a name="l01494"></a>01494             }
<a name="l01495"></a>01495             <span class="comment">// Extracts all the characters which compound the identifier</span>
<a name="l01496"></a>01496             this-&gt;m_strIdentifierValue = this-&gt;m_strSource.substr(iStartPos,
<a name="l01497"></a>01497                                                                   (this-&gt;m_iCurrentIndex - iStartPos)
<a name="l01498"></a>01498                                                                  );
<a name="l01499"></a>01499             <span class="keywordflow">return</span> this-&gt;m_tokCurrentToken = <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b4e0c2f8ef0750e35c5f47bd6a36391e2">TV_IDENTIFIER</a>;
<a name="l01500"></a>01500         }
<a name="l01501"></a>01501 
<a name="l01502"></a>01502     <span class="keywordflow">default</span>:
<a name="l01503"></a>01503         this-&gt;m_tokCurrentToken = <a class="code" href="_v_calc_parser_types_8h.html#0266b1a639975838e174584238b9bf1b3bca2c7b3b6a043183c50e11e7f4b534">TV_END</a>;
<a name="l01504"></a>01504         <span class="keywordflow">throw</span> <a class="code" href="class_c_unexpected_character_exception.html">CUnexpectedCharacterException</a>(ch, this-&gt;m_iCurrentIndex);
<a name="l01505"></a>01505     }
<a name="l01506"></a>01506 }
<a name="l01507"></a>01507 
<a name="l01508"></a>01508 
<a name="l01517"></a><a class="code" href="class_c_v_calc_parser.html#4b3679c0f0bedf36870bb4569d194be9">01517</a> <span class="keywordtype">bool</span> <a class="code" href="class_c_v_calc_parser.html#4b3679c0f0bedf36870bb4569d194be9">CVCalcParser::StepIndexForward</a>(<span class="keywordtype">void</span>) {
<a name="l01518"></a>01518     this-&gt;<a class="code" href="class_c_v_calc_parser.html#6177c1853c93e2d858cf3f9e21991023">m_iCurrentIndex</a>++;
<a name="l01519"></a>01519     <span class="keywordflow">if</span> (<a class="code" href="class_c_v_calc_parser.html#6177c1853c93e2d858cf3f9e21991023">m_iCurrentIndex</a> &gt; <a class="code" href="class_c_v_calc_parser.html#a0c7add01e5a5ca2b4dcc8297e4fac5b">m_strSource</a>.length() - 1) {
<a name="l01520"></a>01520         <span class="keywordflow">return</span> <a class="code" href="class_c_v_calc_parser.html#be462338d9d624357cd648b4e015d108">m_bEndEncountered</a> = <span class="keyword">true</span>;
<a name="l01521"></a>01521     }
<a name="l01522"></a>01522     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01523"></a>01523 }
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Feb 6 23:55:55 2006 for VisualCalc Parser by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.5 </small></address>
</body>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Accenture Technology Solutions
France France

Toxcct is an electronics guy who felt in love with programming at the age of 10 when he discovered C to play with Texas-Instruments calculators.

Few years later, he discovered "The C++ Language" from Bjarne Stroustrup ; a true transformation in his life.

Now, toxcct is experiencing the Web by developing Siebel CRM Applications for a living. He also respects very much the Web Standards (YES, a HTML/CSS code MUST validate !), and plays around with HTML/CSS/Javascript/Ajax/PHP and such.

_____

After four years of services as a Codeproject MVP, toxcct is now taking some distance as he doesn't like how things are going on the forums. he particularly doesn't accept how some totally ignorant people got the MVP Reward by only being arrogant and insulting while replying on the technical forums.



Comments and Discussions