svf-tools 1.0.617 → 1.0.618

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -165,8 +165,8 @@ Private Member Functions</h2></td></tr>
165
165
  </table>
166
166
  </div><div class="memdoc">
167
167
 
168
- <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00297">297</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
169
- <div class="fragment"><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;symbolToProductionsPair : grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> productions;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">//GrammarBase::Productions Originalproductions = symbolToProductionsPair.second;</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> ebnfProduction : symbolToProductionsPair.second)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordtype">size_t</span> i = 1;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordtype">size_t</span> j = 1;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">while</span> (i &lt; ebnfProduction.size())</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">if</span> (grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i].kind) == <span class="stringliteral">&quot;|&quot;</span>)</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> tempPro(ebnfProduction.begin()+j, ebnfProduction.begin()+i);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; tempPro.insert(tempPro.begin(), symbolToProductionsPair.first );</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; productions.insert(tempPro);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; j = i+1;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; i++;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> tempPro(ebnfProduction.begin()+j, ebnfProduction.begin()+i);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; tempPro.insert(tempPro.begin(), symbolToProductionsPair.first );</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; productions.insert(tempPro);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; symbolToProductionsPair.second.clear();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; symbolToProductionsPair.second = productions;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;}</div><div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00190">CFLGrammar.h:190</a></div></div>
168
+ <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00296">296</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
169
+ <div class="fragment"><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;{</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;symbolToProductionsPair : grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> productions;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">//GrammarBase::Productions Originalproductions = symbolToProductionsPair.second;</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> ebnfProduction : symbolToProductionsPair.second)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordtype">size_t</span> i = 1;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordtype">size_t</span> j = 1;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">while</span> (i &lt; ebnfProduction.size())</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">if</span> (grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i].kind) == <span class="stringliteral">&quot;|&quot;</span>)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> tempPro(ebnfProduction.begin()+j, ebnfProduction.begin()+i);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; tempPro.insert(tempPro.begin(), symbolToProductionsPair.first );</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; productions.insert(tempPro);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; j = i+1;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; i++;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> tempPro(ebnfProduction.begin()+j, ebnfProduction.begin()+i);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; tempPro.insert(tempPro.begin(), symbolToProductionsPair.first );</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; productions.insert(tempPro);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; symbolToProductionsPair.second.clear();</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; symbolToProductionsPair.second = productions;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;}</div><div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00190">CFLGrammar.h:190</a></div></div>
170
170
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a755024745a77509d2f07867be8245a4d"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">SVF::GrammarBase::Productions</a></div><div class="ttdeci">SymbolSet&lt; Production &gt; Productions</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00157">CFLGrammar.h:157</a></div></div>
171
171
  <div class="ttc" id="classSVF_1_1GrammarBase_html_ac8ecc4293c5a63d2d30d0ca0832217d3"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">SVF::GrammarBase::kind2Str</a></div><div class="ttdeci">std::string kind2Str(Kind kind) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00103">CFLGrammar.cpp:103</a></div></div>
172
172
  <div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector&lt; Symbol &gt; Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00156">CFLGrammar.h:156</a></div></div>
@@ -207,8 +207,8 @@ Private Member Functions</h2></td></tr>
207
207
  </table>
208
208
  </div><div class="memdoc">
209
209
 
210
- <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00458">458</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
211
- <div class="fragment"><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;{</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> symProdPair: grammar)</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> prod: symProdPair.second)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">if</span> (rule == prod)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">return</span> symProdPair.first;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> symbol = <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> symbol;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00050">SVFType.h:50</a></div></div>
210
+ <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00457">457</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
211
+ <div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> symProdPair: grammar)</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> prod: symProdPair.second)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">if</span> (rule == prod)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">return</span> symProdPair.first;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> symbol = <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span> symbol;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00050">SVFType.h:50</a></div></div>
212
212
  <div class="ttc" id="structSVF_1_1GrammarBase_1_1Symbol_html"><div class="ttname"><a href="structSVF_1_1GrammarBase_1_1Symbol.html">SVF::GrammarBase::Symbol</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00042">CFLGrammar.h:42</a></div></div>
213
213
  </div><!-- fragment -->
214
214
  </div>
@@ -241,7 +241,7 @@ Private Member Functions</h2></td></tr>
241
241
  <p>Assign _attribute if target portion of the production contain more than 1 variable then X add no variable attribute if target only contain one variable attribute X share the same variable attribute </p>
242
242
 
243
243
  <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00092">92</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
244
- <div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a4405933cc8ed8cf30b98ee16fc14c112">GrammarBase::SymbolMap&lt;GrammarBase::Symbol, GrammarBase::Productions&gt;</a> new_grammar = {};</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> tempStr = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1CFGNormalizer.html#afd29c476dad9728a10e19561e846f97e">removeFirstSymbol</a>(grammar);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">auto</span> rawProductions = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> itr : rawProductions)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">auto</span> head = *(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().find(itr.first));</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> rule: head.second)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span> (rule.size() &lt; 3) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> long_run = rule;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> first = long_run[0];</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; long_run.erase(long_run.begin());</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">auto</span> it = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].find(rule);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].erase(it);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> X = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(new_grammar, long_run);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span> (X == <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1))</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; X = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>(), long_run);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span> ((X == <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1)) == <span class="keyword">false</span>)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; rule = {first, X};</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; tempStr = <span class="stringliteral">&quot;X&quot;</span>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; std::ostringstream ss;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; ss &lt;&lt; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a2494806a1282de3d7f6b588f7d6cc83e">num_generator</a>();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; tempStr.append(ss.str());</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;GrammarBase::VariableAttribute&gt;</a> variableAttributeSet = {};</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; long_run.size(); i++)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> variableAttribute = long_run[i].variableAttribute;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> ( variableAttribute != 0)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; variableAttributeSet.insert(variableAttribute);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> ( variableAttributeSet.size() == 1)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; tempStr += <span class="stringliteral">&quot;_&quot;</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; tempStr += char(*variableAttributeSet.begin());</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempStr);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; rule = {first, tempSym};</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; X = tempSym;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; new_grammar[X] = {};</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> temp_p = long_run;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> RHX;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (long_run.size() ==2)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; new_grammar[X].insert(temp_p);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; long_run.clear();</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; new_grammar[X].insert(long_run);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; RHX = X;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">while</span> (long_run.size() &gt; 2)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; first = long_run[0];</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> prev_rule = long_run;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; long_run.erase(long_run.begin());</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; X = RHX;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; temp_p = long_run;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; RHX = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(new_grammar, long_run);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">if</span> (RHX == <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1))</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; RHX = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>(), long_run);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">if</span>(RHX == <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1))</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; tempStr = <span class="stringliteral">&quot;X&quot;</span>;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; std::ostringstream ss;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; ss &lt;&lt; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a2494806a1282de3d7f6b588f7d6cc83e">num_generator</a>();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; tempStr.append(ss.str());</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;GrammarBase::VariableAttribute&gt;</a> variableAttributeSet = {};</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; long_run.size(); i++)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> variableAttribute = long_run[i].variableAttribute;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">if</span> ( variableAttribute != 0)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; variableAttributeSet.insert(variableAttribute);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> ( variableAttributeSet.size() == 1)</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; tempStr += <span class="stringliteral">&quot;_&quot;</span>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; tempStr += char(*variableAttributeSet.begin());</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempStr);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keyword">auto</span> it = new_grammar[X].find(prev_rule);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; new_grammar[X].erase(it);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; new_grammar[X].insert({first, tempSym});</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; new_grammar[tempSym].insert(long_run);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; RHX = tempSym;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> new_head : new_grammar)</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> prod : new_head.second)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">auto</span> it = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].find(prod);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (it == grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].end())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].insert(prod);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;}</div><div class="ttc" id="classSVF_1_1CFGNormalizer_html_afd29c476dad9728a10e19561e846f97e"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#afd29c476dad9728a10e19561e846f97e">SVF::CFGNormalizer::removeFirstSymbol</a></div><div class="ttdeci">void removeFirstSymbol(CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00498">CFGNormalizer.cpp:498</a></div></div>
244
+ <div class="fragment"><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a4405933cc8ed8cf30b98ee16fc14c112">GrammarBase::SymbolMap&lt;GrammarBase::Symbol, GrammarBase::Productions&gt;</a> new_grammar = {};</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> tempStr = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1CFGNormalizer.html#afd29c476dad9728a10e19561e846f97e">removeFirstSymbol</a>(grammar);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">auto</span> rawProductions = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> itr : rawProductions)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">auto</span> head = *(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().find(itr.first));</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> rule: head.second)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span> (rule.size() &lt; 3) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> first = rule[0];</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> long_run(rule.begin() + 1, rule.end());</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">auto</span> it = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].find(rule);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].erase(it);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> X = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(new_grammar, long_run);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (X == <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1))</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; X = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>(), long_run);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> ((X == <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1)) == <span class="keyword">false</span>)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; rule = {first, X};</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; tempStr = <span class="stringliteral">&quot;X&quot;</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; std::ostringstream ss;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; ss &lt;&lt; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a2494806a1282de3d7f6b588f7d6cc83e">num_generator</a>();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; tempStr.append(ss.str());</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;GrammarBase::VariableAttribute&gt;</a> variableAttributeSet = {};</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; long_run.size(); i++)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> variableAttribute = long_run[i].variableAttribute;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> ( variableAttribute != 0)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; variableAttributeSet.insert(variableAttribute);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> ( variableAttributeSet.size() == 1)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; tempStr += <span class="stringliteral">&quot;_&quot;</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; tempStr += char(*variableAttributeSet.begin());</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempStr);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; rule = {first, tempSym};</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(rule);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; X = tempSym;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; new_grammar[X] = {};</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> temp_p = long_run;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> RHX;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (long_run.size() ==2)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; new_grammar[X].insert(temp_p);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; long_run.clear();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; new_grammar[X].insert(long_run);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; RHX = X;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">while</span> (long_run.size() &gt; 2)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; first = long_run[0];</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> prev_rule = long_run;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; long_run.erase(long_run.begin());</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; X = RHX;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; temp_p = long_run;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; RHX = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(new_grammar, long_run);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (RHX == <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1))</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; RHX = <a class="code" href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">check_head</a>(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>(), long_run);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span>(RHX == <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>(-1))</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; tempStr = <span class="stringliteral">&quot;X&quot;</span>;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; std::ostringstream ss;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; ss &lt;&lt; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a2494806a1282de3d7f6b588f7d6cc83e">num_generator</a>();</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; tempStr.append(ss.str());</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set&lt;GrammarBase::VariableAttribute&gt;</a> variableAttributeSet = {};</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; long_run.size(); i++)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> variableAttribute = long_run[i].variableAttribute;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> ( variableAttribute != 0)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; variableAttributeSet.insert(variableAttribute);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">if</span> ( variableAttributeSet.size() == 1)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; tempStr += <span class="stringliteral">&quot;_&quot;</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; tempStr += char(*variableAttributeSet.begin());</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempStr);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">auto</span> it = new_grammar[X].find(prev_rule);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; new_grammar[X].erase(it);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; new_grammar[X].insert({first, tempSym});</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; new_grammar[tempSym].insert(long_run);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; RHX = tempSym;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> new_head : new_grammar)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> prod : new_head.second)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">auto</span> it = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].find(prod);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span> (it == grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].end())</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[new_head.first].insert(prod);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;}</div><div class="ttc" id="classSVF_1_1CFGNormalizer_html_afd29c476dad9728a10e19561e846f97e"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#afd29c476dad9728a10e19561e846f97e">SVF::CFGNormalizer::removeFirstSymbol</a></div><div class="ttdeci">void removeFirstSymbol(CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00497">CFGNormalizer.cpp:497</a></div></div>
245
245
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00190">CFLGrammar.h:190</a></div></div>
246
246
  <div class="ttc" id="classSVF_1_1CFLGrammar_html_a2494806a1282de3d7f6b588f7d6cc83e"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#a2494806a1282de3d7f6b588f7d6cc83e">SVF::CFLGrammar::num_generator</a></div><div class="ttdeci">const u32_t num_generator()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00388">CFLGrammar.h:388</a></div></div>
247
247
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a4405933cc8ed8cf30b98ee16fc14c112"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4405933cc8ed8cf30b98ee16fc14c112">SVF::GrammarBase::SymbolMap</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; SymbolMap</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00150">CFLGrammar.h:150</a></div></div>
@@ -251,7 +251,7 @@ Private Member Functions</h2></td></tr>
251
251
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a63389968c8d246a84562a8d17e08790b"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">SVF::GrammarBase::insertNonTerminalSymbol</a></div><div class="ttdeci">Symbol insertNonTerminalSymbol(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00249">CFLGrammar.cpp:249</a></div></div>
252
252
  <div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector&lt; Symbol &gt; Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00156">CFLGrammar.h:156</a></div></div>
253
253
  <div class="ttc" id="structSVF_1_1GrammarBase_1_1Symbol_html"><div class="ttname"><a href="structSVF_1_1GrammarBase_1_1Symbol.html">SVF::GrammarBase::Symbol</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00042">CFLGrammar.h:42</a></div></div>
254
- <div class="ttc" id="classSVF_1_1CFGNormalizer_html_afe01de5c8333e4ba436adbdc0e99e3cc"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">SVF::CFGNormalizer::check_head</a></div><div class="ttdeci">GrammarBase::Symbol check_head(GrammarBase::SymbolMap&lt; GrammarBase::Symbol, GrammarBase::Productions &gt; &amp;grammar, GrammarBase::Production &amp;rule)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00458">CFGNormalizer.cpp:458</a></div></div>
254
+ <div class="ttc" id="classSVF_1_1CFGNormalizer_html_afe01de5c8333e4ba436adbdc0e99e3cc"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#afe01de5c8333e4ba436adbdc0e99e3cc">SVF::CFGNormalizer::check_head</a></div><div class="ttdeci">GrammarBase::Symbol check_head(GrammarBase::SymbolMap&lt; GrammarBase::Symbol, GrammarBase::Productions &gt; &amp;grammar, GrammarBase::Production &amp;rule)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00457">CFGNormalizer.cpp:457</a></div></div>
255
255
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
256
256
  </div><!-- fragment -->
257
257
  </div>
@@ -296,8 +296,8 @@ Private Member Functions</h2></td></tr>
296
296
  </table>
297
297
  </div><div class="memdoc">
298
298
 
299
- <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00283">283</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
300
- <div class="fragment"><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;{</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">int</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = i;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">while</span> (index &gt;= 0)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(prod[index].kind) == <span class="stringliteral">&quot;(&quot;</span>)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; index--;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;}</div><div class="ttc" id="cJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
299
+ <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00282">282</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
300
+ <div class="fragment"><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;{</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordtype">int</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = i;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">while</span> (index &gt;= 0)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span> (grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(prod[index].kind) == <span class="stringliteral">&quot;(&quot;</span>)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; {</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; index--;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;}</div><div class="ttc" id="cJSON_8h_html_a750b5d744c39a06bfb13e6eb010e35d0"><div class="ttname"><a href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00170">cJSON.h:170</a></div></div>
301
301
  <div class="ttc" id="classSVF_1_1GrammarBase_html_ac8ecc4293c5a63d2d30d0ca0832217d3"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">SVF::GrammarBase::kind2Str</a></div><div class="ttdeci">std::string kind2Str(Kind kind) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00103">CFLGrammar.cpp:103</a></div></div>
302
302
  </div><!-- fragment -->
303
303
  </div>
@@ -342,8 +342,8 @@ Private Member Functions</h2></td></tr>
342
342
  <p>insert second rule for '*' X -&gt; X E for '+' X -&gt; E</p>
343
343
  <p>Insert Back the Group </p>
344
344
 
345
- <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00327">327</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
346
- <div class="fragment"><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;{</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map&lt;std::string, std::string&gt;</a> newProductions;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> tempNonterminal = <span class="stringliteral">&quot;X&quot;</span>;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;symbolToProductionsPair : grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> productions = symbolToProductionsPair.second;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> ebnfProduction : symbolToProductionsPair.second)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordtype">size_t</span> i = 1;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">while</span> (i &lt; ebnfProduction.size())</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> signGroupStart = -1;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">if</span> (grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i].kind) == <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(1, sign))</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; assert(i != 1 &amp;&amp; <span class="stringliteral">&quot;sign in grammar associate with no symbol&quot;</span>);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i - 1].kind) != <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(1, <span class="charliteral">&#39;)&#39;</span>))</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; signGroupStart = i - 1;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; signGroupStart = <a class="code" href="classSVF_1_1CFGNormalizer.html#a8eddaa57527c0e5e538b1d207da7adc0">ebnfBracketMatch</a>(ebnfProduction, i, grammar);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> groupString = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = signGroupStart; j &lt; i; j++)</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; groupString.append(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[j].kind));</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; groupString.append(<span class="stringliteral">&quot; &quot;</span>);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; groupString.append(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i].kind));</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">if</span> (newProductions.find(groupString) != newProductions.end())</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; productions.erase(ebnfProduction);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; ebnfProduction.erase(ebnfProduction.begin() + signGroupStart, ebnfProduction.begin() + i + 1);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; ebnfProduction.insert(ebnfProduction.begin() + signGroupStart, grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(newProductions[groupString]));</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; productions.insert(ebnfProduction);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (signGroupStart == 1) &amp;&amp; (i == ebnfProduction.size() -1))</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; {</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; newProductions[groupString] = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[0].kind);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; productions.erase(ebnfProduction);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; ebnfProduction.erase(ebnfProduction.begin() + signGroupStart, ebnfProduction.begin() + i + 1);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; tempNonterminal = <span class="stringliteral">&quot;X&quot;</span>;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; std::ostringstream ss;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; ss &lt;&lt; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a2494806a1282de3d7f6b588f7d6cc83e">num_generator</a>();</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; tempNonterminal.append(ss.str());</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempNonterminal);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; productions.erase(ebnfProduction);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; ebnfProduction.erase(ebnfProduction.begin() + signGroupStart, ebnfProduction.begin() + i + 1);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; ebnfProduction.insert(ebnfProduction.begin() + signGroupStart, tempSym);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; newProductions[groupString] = tempNonterminal;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; productions.insert(ebnfProduction);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; i = signGroupStart;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; i++;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; symbolToProductionsPair.second = productions;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> rep: newProductions)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> new_nonterminal = rep.second;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> temp_list = {grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal), grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;epsilon&quot;</span>)};</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)].insert(temp_list);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; temp_list = {grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)};</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">if</span> (sign == <span class="charliteral">&#39;*&#39;</span> || sign == <span class="charliteral">&#39;?&#39;</span>)</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> normalProd;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="classSVF_1_1CFGNormalizer.html#a4b9b6c676ce6514ae725f543b1e07acf">strTrans</a>(rep.first, grammar, normalProd);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> withoutSign = {};</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (sign == <span class="charliteral">&#39;*&#39;</span>)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;word : normalProd)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span> (word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;*&quot;</span>) &amp;&amp; word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;(&quot;</span>) &amp;&amp; word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;)&quot;</span>))</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; withoutSign.push_back(word);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; withoutSign.push_back(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(rep.second));</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; }</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span> (sign == <span class="charliteral">&#39;?&#39;</span>)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;word : normalProd)</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">if</span> (word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;?&quot;</span>) &amp;&amp; word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;(&quot;</span>) &amp;&amp; word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;)&quot;</span>))</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; withoutSign.push_back(word);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; temp_list.insert(temp_list.end(), withoutSign.begin(), withoutSign.end());</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)].insert(temp_list);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;}</div><div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00190">CFLGrammar.h:190</a></div></div>
345
+ <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00326">326</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
346
+ <div class="fragment"><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;{</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map&lt;std::string, std::string&gt;</a> newProductions;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> tempNonterminal = <span class="stringliteral">&quot;X&quot;</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;symbolToProductionsPair : grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> productions = symbolToProductionsPair.second;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> ebnfProduction : symbolToProductionsPair.second)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordtype">size_t</span> i = 1;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">while</span> (i &lt; ebnfProduction.size())</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> signGroupStart = -1;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i].kind) == <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(1, sign))</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; assert(i != 1 &amp;&amp; <span class="stringliteral">&quot;sign in grammar associate with no symbol&quot;</span>);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">if</span> (grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i - 1].kind) != <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>(1, <span class="charliteral">&#39;)&#39;</span>))</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; signGroupStart = i - 1;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; signGroupStart = <a class="code" href="classSVF_1_1CFGNormalizer.html#a8eddaa57527c0e5e538b1d207da7adc0">ebnfBracketMatch</a>(ebnfProduction, i, grammar);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> groupString = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = signGroupStart; j &lt; i; j++)</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; groupString.append(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[j].kind));</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; groupString.append(<span class="stringliteral">&quot; &quot;</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; groupString.append(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[i].kind));</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">if</span> (newProductions.find(groupString) != newProductions.end())</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; productions.erase(ebnfProduction);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; ebnfProduction.erase(ebnfProduction.begin() + signGroupStart, ebnfProduction.begin() + i + 1);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; ebnfProduction.insert(ebnfProduction.begin() + signGroupStart, grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(newProductions[groupString]));</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; productions.insert(ebnfProduction);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (signGroupStart == 1) &amp;&amp; (i == ebnfProduction.size() -1))</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; newProductions[groupString] = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ac8ecc4293c5a63d2d30d0ca0832217d3">kind2Str</a>(ebnfProduction[0].kind);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; productions.erase(ebnfProduction);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; ebnfProduction.erase(ebnfProduction.begin() + signGroupStart, ebnfProduction.begin() + i + 1);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; {</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; tempNonterminal = <span class="stringliteral">&quot;X&quot;</span>;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; std::ostringstream ss;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; ss &lt;&lt; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a2494806a1282de3d7f6b588f7d6cc83e">num_generator</a>();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; tempNonterminal.append(ss.str());</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> tempSym = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(tempNonterminal);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; productions.erase(ebnfProduction);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; ebnfProduction.erase(ebnfProduction.begin() + signGroupStart, ebnfProduction.begin() + i + 1);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; ebnfProduction.insert(ebnfProduction.begin() + signGroupStart, tempSym);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; newProductions[groupString] = tempNonterminal;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; productions.insert(ebnfProduction);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; i = signGroupStart;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; i++;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; symbolToProductionsPair.second = productions;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> rep: newProductions)</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> new_nonterminal = rep.second;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> temp_list = {grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal), grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;epsilon&quot;</span>)};</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)].insert(temp_list);</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; temp_list = {grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)};</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">if</span> (sign == <span class="charliteral">&#39;*&#39;</span> || sign == <span class="charliteral">&#39;?&#39;</span>)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> normalProd;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classSVF_1_1CFGNormalizer.html#a4b9b6c676ce6514ae725f543b1e07acf">strTrans</a>(rep.first, grammar, normalProd);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> withoutSign = {};</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">if</span> (sign == <span class="charliteral">&#39;*&#39;</span>)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;word : normalProd)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">if</span> (word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;*&quot;</span>) &amp;&amp; word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;(&quot;</span>) &amp;&amp; word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;)&quot;</span>))</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; withoutSign.push_back(word);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; withoutSign.push_back(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(rep.second));</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span> (sign == <span class="charliteral">&#39;?&#39;</span>)</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;word : normalProd)</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;?&quot;</span>) &amp;&amp; word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;(&quot;</span>) &amp;&amp; word != grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(<span class="stringliteral">&quot;)&quot;</span>))</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; withoutSign.push_back(word);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; temp_list.insert(temp_list.end(), withoutSign.begin(), withoutSign.end());</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(new_nonterminal)].insert(temp_list);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;}</div><div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00190">CFLGrammar.h:190</a></div></div>
347
347
  <div class="ttc" id="classSVF_1_1CFLGrammar_html_a2494806a1282de3d7f6b588f7d6cc83e"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#a2494806a1282de3d7f6b588f7d6cc83e">SVF::CFLGrammar::num_generator</a></div><div class="ttdeci">const u32_t num_generator()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00388">CFLGrammar.h:388</a></div></div>
348
348
  <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
349
349
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a755024745a77509d2f07867be8245a4d"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">SVF::GrammarBase::Productions</a></div><div class="ttdeci">SymbolSet&lt; Production &gt; Productions</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00157">CFLGrammar.h:157</a></div></div>
@@ -352,10 +352,10 @@ Private Member Functions</h2></td></tr>
352
352
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a63389968c8d246a84562a8d17e08790b"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">SVF::GrammarBase::insertNonTerminalSymbol</a></div><div class="ttdeci">Symbol insertNonTerminalSymbol(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00249">CFLGrammar.cpp:249</a></div></div>
353
353
  <div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector&lt; Symbol &gt; Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00156">CFLGrammar.h:156</a></div></div>
354
354
  <div class="ttc" id="structSVF_1_1GrammarBase_1_1Symbol_html"><div class="ttname"><a href="structSVF_1_1GrammarBase_1_1Symbol.html">SVF::GrammarBase::Symbol</a></div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00042">CFLGrammar.h:42</a></div></div>
355
- <div class="ttc" id="classSVF_1_1CFGNormalizer_html_a4b9b6c676ce6514ae725f543b1e07acf"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a4b9b6c676ce6514ae725f543b1e07acf">SVF::CFGNormalizer::strTrans</a></div><div class="ttdeci">void strTrans(std::string strPro, CFLGrammar *grammar, GrammarBase::Production &amp;normalProd)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00439">CFGNormalizer.cpp:439</a></div></div>
355
+ <div class="ttc" id="classSVF_1_1CFGNormalizer_html_a4b9b6c676ce6514ae725f543b1e07acf"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a4b9b6c676ce6514ae725f543b1e07acf">SVF::CFGNormalizer::strTrans</a></div><div class="ttdeci">void strTrans(std::string strPro, CFLGrammar *grammar, GrammarBase::Production &amp;normalProd)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00438">CFGNormalizer.cpp:438</a></div></div>
356
356
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
357
357
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a5c081c6ff0501fc91b71352995d6d9dc"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">SVF::GrammarBase::str2Symbol</a></div><div class="ttdeci">Symbol str2Symbol(const std::string str) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00074">CFLGrammar.cpp:74</a></div></div>
358
- <div class="ttc" id="classSVF_1_1CFGNormalizer_html_a8eddaa57527c0e5e538b1d207da7adc0"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a8eddaa57527c0e5e538b1d207da7adc0">SVF::CFGNormalizer::ebnfBracketMatch</a></div><div class="ttdeci">int ebnfBracketMatch(GrammarBase::Production &amp;prod, int i, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00283">CFGNormalizer.cpp:283</a></div></div>
358
+ <div class="ttc" id="classSVF_1_1CFGNormalizer_html_a8eddaa57527c0e5e538b1d207da7adc0"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a8eddaa57527c0e5e538b1d207da7adc0">SVF::CFGNormalizer::ebnfBracketMatch</a></div><div class="ttdeci">int ebnfBracketMatch(GrammarBase::Production &amp;prod, int i, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00282">CFGNormalizer.cpp:282</a></div></div>
359
359
  </div><!-- fragment -->
360
360
  </div>
361
361
  </div>
@@ -390,11 +390,11 @@ Private Member Functions</h2></td></tr>
390
390
 
391
391
  <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00062">62</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
392
392
  <div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a> nodeSet = {};</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> pair: kind2AttrsMap)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> attri: pair.second)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; nodeSet.insert(attri);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> symProdsPair: grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> prod: symProdsPair.second)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> tempP = prod;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; tempP.insert(tempP.begin(), symProdsPair.first);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">GrammarBase::Productions</a> normalProds;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="classSVF_1_1CFGNormalizer.html#add319949e856049d3e898848a02a75b7">getFilledProductions</a>(tempP, nodeSet, grammar, normalProds);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> filledProd : normalProds)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classSVF_1_1CFGNormalizer.html#ad08f183a1b8ca69201f965f224e92950">insertToCFLGrammar</a>(grammar, filledProd);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> grammar;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set&lt; NodeID &gt; NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00110">SVFType.h:110</a></div></div>
393
- <div class="ttc" id="classSVF_1_1CFGNormalizer_html_ad08f183a1b8ca69201f965f224e92950"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#ad08f183a1b8ca69201f965f224e92950">SVF::CFGNormalizer::insertToCFLGrammar</a></div><div class="ttdeci">void insertToCFLGrammar(CFLGrammar *grammar, GrammarBase::Production &amp;prod)</div><div class="ttdoc">Based on prod size to add on suitable member field of grammar. </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00475">CFGNormalizer.cpp:475</a></div></div>
393
+ <div class="ttc" id="classSVF_1_1CFGNormalizer_html_ad08f183a1b8ca69201f965f224e92950"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#ad08f183a1b8ca69201f965f224e92950">SVF::CFGNormalizer::insertToCFLGrammar</a></div><div class="ttdeci">void insertToCFLGrammar(CFLGrammar *grammar, GrammarBase::Production &amp;prod)</div><div class="ttdoc">Based on prod size to add on suitable member field of grammar. </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00474">CFGNormalizer.cpp:474</a></div></div>
394
394
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00190">CFLGrammar.h:190</a></div></div>
395
395
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a755024745a77509d2f07867be8245a4d"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a755024745a77509d2f07867be8245a4d">SVF::GrammarBase::Productions</a></div><div class="ttdeci">SymbolSet&lt; Production &gt; Productions</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00157">CFLGrammar.h:157</a></div></div>
396
396
  <div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector&lt; Symbol &gt; Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00156">CFLGrammar.h:156</a></div></div>
397
- <div class="ttc" id="classSVF_1_1CFGNormalizer_html_add319949e856049d3e898848a02a75b7"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#add319949e856049d3e898848a02a75b7">SVF::CFGNormalizer::getFilledProductions</a></div><div class="ttdeci">void getFilledProductions(GrammarBase::Production &amp;prod, const NodeSet &amp;nodeSet, CFLGrammar *grammar, GrammarBase::Productions &amp;normalProds)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00225">CFGNormalizer.cpp:225</a></div></div>
397
+ <div class="ttc" id="classSVF_1_1CFGNormalizer_html_add319949e856049d3e898848a02a75b7"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#add319949e856049d3e898848a02a75b7">SVF::CFGNormalizer::getFilledProductions</a></div><div class="ttdeci">void getFilledProductions(GrammarBase::Production &amp;prod, const NodeSet &amp;nodeSet, CFLGrammar *grammar, GrammarBase::Productions &amp;normalProds)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00224">CFGNormalizer.cpp:224</a></div></div>
398
398
  </div><!-- fragment -->
399
399
  </div>
400
400
  </div>
@@ -447,8 +447,8 @@ Private Member Functions</h2></td></tr>
447
447
  <p>Get the first encounter variable attribute to expand</p>
448
448
  <p>Check whether all symbol expanded </p>
449
449
 
450
- <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00225">225</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
451
- <div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;{</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; normalProds.clear();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classSVF_1_1CFLFIFOWorkList.html">CFLFIFOWorkList&lt;GrammarBase::Production&gt;</a> worklist;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#af043947e65b5a900df799825f140f75a">push</a>(prod);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">while</span>( worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#aa0ce832f5eeae74d52260fd8954d545f">empty</a>() == <a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a> )</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> currentProduction = worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#a8ccf884ed6bc0d172f3c2999717f9cff">pop</a>();</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> currentVariableAttribute = 0;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// GrammarBase::Kind baseKind;</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &amp;symbol : currentProduction )</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> ( currentVariableAttribute == 0 )</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; currentVariableAttribute = symbol.variableAttribute;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// baseKind = symbol.kind;</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span> ( currentVariableAttribute == 0)</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; normalProds.insert(currentProduction);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">//*(kind2AttriMap.find(baseKind));</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">//for (auto attribute : nodeSet.second)</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> attribute : nodeSet)</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> fillingProduction = currentProduction;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &amp;symbol : fillingProduction )</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> ( symbol.variableAttribute == currentVariableAttribute)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; symbol.attribute = attribute;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; symbol.variableAttribute = 0;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordtype">bool</span> continueToFill = <span class="keyword">false</span>;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &amp;symbol : fillingProduction )</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> ( symbol.variableAttribute != 0 )</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; continueToFill = <span class="keyword">true</span>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordflow">if</span> ( continueToFill == <span class="keyword">false</span>)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; normalProds.insert(fillingProduction);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#af043947e65b5a900df799825f140f75a">push</a>(fillingProduction);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;}</div><div class="ttc" id="cJSON_8cpp_html_a65e9886d74aaee76545e83dd09011727"><div class="ttname"><a href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a></div><div class="ttdeci">#define false</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00070">cJSON.cpp:70</a></div></div>
450
+ <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00224">224</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
451
+ <div class="fragment"><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;{</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; normalProds.clear();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classSVF_1_1CFLFIFOWorkList.html">CFLFIFOWorkList&lt;GrammarBase::Production&gt;</a> worklist;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#af043947e65b5a900df799825f140f75a">push</a>(prod);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">while</span>( worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#aa0ce832f5eeae74d52260fd8954d545f">empty</a>() == <a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a> )</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> currentProduction = worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#a8ccf884ed6bc0d172f3c2999717f9cff">pop</a>();</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">GrammarBase::VariableAttribute</a> currentVariableAttribute = 0;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// GrammarBase::Kind baseKind;</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &amp;symbol : currentProduction )</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> ( currentVariableAttribute == 0 )</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; currentVariableAttribute = symbol.variableAttribute;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// baseKind = symbol.kind;</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span> ( currentVariableAttribute == 0)</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; normalProds.insert(currentProduction);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">//*(kind2AttriMap.find(baseKind));</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">//for (auto attribute : nodeSet.second)</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> attribute : nodeSet)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> fillingProduction = currentProduction;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &amp;symbol : fillingProduction )</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">if</span> ( symbol.variableAttribute == currentVariableAttribute)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; symbol.attribute = attribute;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; symbol.variableAttribute = 0;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordtype">bool</span> continueToFill = <span class="keyword">false</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">for</span> ( <a class="code" href="structSVF_1_1GrammarBase_1_1Symbol.html">GrammarBase::Symbol</a> &amp;symbol : fillingProduction )</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> ( symbol.variableAttribute != 0 )</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; continueToFill = <span class="keyword">true</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span> ( continueToFill == <span class="keyword">false</span>)</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; normalProds.insert(fillingProduction);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; worklist.<a class="code" href="classSVF_1_1CFLFIFOWorkList.html#af043947e65b5a900df799825f140f75a">push</a>(fillingProduction);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;}</div><div class="ttc" id="cJSON_8cpp_html_a65e9886d74aaee76545e83dd09011727"><div class="ttname"><a href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a></div><div class="ttdeci">#define false</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l00070">cJSON.cpp:70</a></div></div>
452
452
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a716ce662e6a3f2febf3ab378c4217759"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a716ce662e6a3f2febf3ab378c4217759">SVF::GrammarBase::VariableAttribute</a></div><div class="ttdeci">u32_t VariableAttribute</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00041">CFLGrammar.h:41</a></div></div>
453
453
  <div class="ttc" id="classSVF_1_1CFLFIFOWorkList_html_a8ccf884ed6bc0d172f3c2999717f9cff"><div class="ttname"><a href="classSVF_1_1CFLFIFOWorkList.html#a8ccf884ed6bc0d172f3c2999717f9cff">SVF::CFLFIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00444">CFLGrammar.h:444</a></div></div>
454
454
  <div class="ttc" id="classSVF_1_1CFLFIFOWorkList_html_aa0ce832f5eeae74d52260fd8954d545f"><div class="ttname"><a href="classSVF_1_1CFLFIFOWorkList.html#aa0ce832f5eeae74d52260fd8954d545f">SVF::CFLFIFOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00416">CFLGrammar.h:416</a></div></div>
@@ -495,8 +495,8 @@ Private Member Functions</h2></td></tr>
495
495
 
496
496
  <p>Based on prod size to add on suitable member field of grammar. </p>
497
497
 
498
- <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00475">475</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
499
- <div class="fragment"><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;{</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">if</span> (prod.size() == 2)</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">if</span> ((std::find(prod.begin(), prod.end(), grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(<span class="stringliteral">&quot;epsilon&quot;</span>)) != prod.end()))</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">if</span> (std::find(grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().begin(), grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().end(), prod) == grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().end())</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().insert(prod);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#afefc9b90be5cf275f476bb7c3f1c74ce">getSingleRHS2Prods</a>()[prod[1]].insert(prod);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">if</span> (prod.size() == 3)</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#ac0f09c94e9c6efc00398ed7d5ca1fe0f">getFirstRHS2Prods</a>()[prod[1]].insert(prod);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#aad22309781ec1a5ab247097dcaa6a0b8">getSecondRHS2Prods</a>()[prod[2]].insert(prod);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;}</div><div class="ttc" id="classSVF_1_1CFLGrammar_html_a8d6292a55da24336d968e20c7ac288d9"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">SVF::CFLGrammar::getEpsilonProds</a></div><div class="ttdeci">Productions &amp; getEpsilonProds()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00308">CFLGrammar.h:308</a></div></div>
498
+ <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00474">474</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
499
+ <div class="fragment"><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;{</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">if</span> (prod.size() == 2)</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">if</span> ((std::find(prod.begin(), prod.end(), grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">str2Kind</a>(<span class="stringliteral">&quot;epsilon&quot;</span>)) != prod.end()))</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">if</span> (std::find(grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().begin(), grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().end(), prod) == grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().end())</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">getEpsilonProds</a>().insert(prod);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#afefc9b90be5cf275f476bb7c3f1c74ce">getSingleRHS2Prods</a>()[prod[1]].insert(prod);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">if</span> (prod.size() == 3)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#ac0f09c94e9c6efc00398ed7d5ca1fe0f">getFirstRHS2Prods</a>()[prod[1]].insert(prod);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1CFLGrammar.html#aad22309781ec1a5ab247097dcaa6a0b8">getSecondRHS2Prods</a>()[prod[2]].insert(prod);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;}</div><div class="ttc" id="classSVF_1_1CFLGrammar_html_a8d6292a55da24336d968e20c7ac288d9"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#a8d6292a55da24336d968e20c7ac288d9">SVF::CFLGrammar::getEpsilonProds</a></div><div class="ttdeci">Productions &amp; getEpsilonProds()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00308">CFLGrammar.h:308</a></div></div>
500
500
  <div class="ttc" id="classSVF_1_1CFLGrammar_html_ac0f09c94e9c6efc00398ed7d5ca1fe0f"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#ac0f09c94e9c6efc00398ed7d5ca1fe0f">SVF::CFLGrammar::getFirstRHS2Prods</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getFirstRHS2Prods()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00318">CFLGrammar.h:318</a></div></div>
501
501
  <div class="ttc" id="classSVF_1_1CFLGrammar_html_aad22309781ec1a5ab247097dcaa6a0b8"><div class="ttname"><a href="classSVF_1_1CFLGrammar.html#aad22309781ec1a5ab247097dcaa6a0b8">SVF::CFLGrammar::getSecondRHS2Prods</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getSecondRHS2Prods()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00323">CFLGrammar.h:323</a></div></div>
502
502
  <div class="ttc" id="classSVF_1_1GrammarBase_html_ad2d56d8cdc4539d4201d1995fb36e772"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ad2d56d8cdc4539d4201d1995fb36e772">SVF::GrammarBase::str2Kind</a></div><div class="ttdeci">Kind str2Kind(std::string str) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00055">CFLGrammar.cpp:55</a></div></div>
@@ -537,13 +537,13 @@ Private Member Functions</h2></td></tr>
537
537
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a1e1bf1e32bcd7c68ce789c2f9f6327c0"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a1e1bf1e32bcd7c68ce789c2f9f6327c0">SVF::GrammarBase::setAttributeKinds</a></div><div class="ttdeci">void setAttributeKinds(const Set&lt; Kind &gt; &amp;attributeKind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00050">CFLGrammar.cpp:50</a></div></div>
538
538
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a44232dfc5b9a13dfe9b72ff18634ab37"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a44232dfc5b9a13dfe9b72ff18634ab37">SVF::GrammarBase::getTerminals</a></div><div class="ttdeci">Map&lt; std::string, Kind &gt; &amp; getTerminals()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00170">CFLGrammar.h:170</a></div></div>
539
539
  <div class="ttc" id="classSVF_1_1CFGNormalizer_html_aec174ad01529a195b710b2f628f9c0d6"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#aec174ad01529a195b710b2f628f9c0d6">SVF::CFGNormalizer::fillAttribute</a></div><div class="ttdeci">CFLGrammar * fillAttribute(CFLGrammar *grammar, const Map&lt; CFLGrammar::Kind, Set&lt; CFLGrammar::Attribute &gt;&gt; &amp;kind2AttrsMap)</div><div class="ttdoc">Expand every variable attribute in rawProductions of grammarbase. </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00062">CFGNormalizer.cpp:62</a></div></div>
540
- <div class="ttc" id="classSVF_1_1CFGNormalizer_html_ad56aa4b7f6eba0c873ea18f83c398bc5"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#ad56aa4b7f6eba0c873ea18f83c398bc5">SVF::CFGNormalizer::barReplace</a></div><div class="ttdeci">void barReplace(CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00297">CFGNormalizer.cpp:297</a></div></div>
540
+ <div class="ttc" id="classSVF_1_1CFGNormalizer_html_ad56aa4b7f6eba0c873ea18f83c398bc5"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#ad56aa4b7f6eba0c873ea18f83c398bc5">SVF::CFGNormalizer::barReplace</a></div><div class="ttdeci">void barReplace(CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00296">CFGNormalizer.cpp:296</a></div></div>
541
541
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a37a31f03501a11e7951d56dbf1cb146a"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a37a31f03501a11e7951d56dbf1cb146a">SVF::GrammarBase::setTotalKind</a></div><div class="ttdeci">void setTotalKind(Kind totalKind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00215">CFLGrammar.h:215</a></div></div>
542
542
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a51b55df841ae449ecf0888325c6e8c6a"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a51b55df841ae449ecf0888325c6e8c6a">SVF::GrammarBase::getEBNFSigns</a></div><div class="ttdeci">Map&lt; std::string, Kind &gt; &amp; getEBNFSigns()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00180">CFLGrammar.h:180</a></div></div>
543
543
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a76e0969670709e24532756e56aafab19"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a76e0969670709e24532756e56aafab19">SVF::GrammarBase::getTotalKind</a></div><div class="ttdeci">Kind getTotalKind()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00200">CFLGrammar.h:200</a></div></div>
544
544
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a2620ded7573ebdb8b4595e199105ef0e"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a2620ded7573ebdb8b4595e199105ef0e">SVF::GrammarBase::getAttrSyms</a></div><div class="ttdeci">const Set&lt; Kind &gt; &amp; getAttrSyms() const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00243">CFLGrammar.h:243</a></div></div>
545
545
  <div class="ttc" id="classSVF_1_1GrammarBase_html_afc9635e14b5871df457bf64fae6ad8cf"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#afc9635e14b5871df457bf64fae6ad8cf">SVF::GrammarBase::setNonterminals</a></div><div class="ttdeci">void setNonterminals(Map&lt; std::string, Kind &gt; &amp;nonterminals)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00165">CFLGrammar.h:165</a></div></div>
546
- <div class="ttc" id="classSVF_1_1CFGNormalizer_html_a37f4a6a11af608439596752d20667648"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a37f4a6a11af608439596752d20667648">SVF::CFGNormalizer::ebnfSignReplace</a></div><div class="ttdeci">void ebnfSignReplace(char sign, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00327">CFGNormalizer.cpp:327</a></div></div>
546
+ <div class="ttc" id="classSVF_1_1CFGNormalizer_html_a37f4a6a11af608439596752d20667648"><div class="ttname"><a href="classSVF_1_1CFGNormalizer.html#a37f4a6a11af608439596752d20667648">SVF::CFGNormalizer::ebnfSignReplace</a></div><div class="ttdeci">void ebnfSignReplace(char sign, CFLGrammar *grammar)</div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8cpp_source.html#l00326">CFGNormalizer.cpp:326</a></div></div>
547
547
  </div><!-- fragment -->
548
548
  </div>
549
549
  </div>
@@ -571,8 +571,8 @@ Private Member Functions</h2></td></tr>
571
571
  </table>
572
572
  </div><div class="memdoc">
573
573
 
574
- <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00498">498</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
575
- <div class="fragment"><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;{</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="comment">// Remove First Terminal</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> head : grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> rule: head.second)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> long_run = rule;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; long_run.erase(long_run.begin());</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">auto</span> it = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().at(head.first).find(rule);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().at(head.first).erase(it);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(long_run);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;}</div><div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00190">CFLGrammar.h:190</a></div></div>
574
+ <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00497">497</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
575
+ <div class="fragment"><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;{</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// Remove First Terminal</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> head : grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>())</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> rule: head.second)</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> long_run = rule;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; long_run.erase(long_run.begin());</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keyword">auto</span> it = grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().at(head.first).find(rule);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().at(head.first).erase(it);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>()[head.first].insert(long_run);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;}</div><div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00190">CFLGrammar.h:190</a></div></div>
576
576
  <div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector&lt; Symbol &gt; Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00156">CFLGrammar.h:156</a></div></div>
577
577
  </div><!-- fragment -->
578
578
  </div>
@@ -617,8 +617,8 @@ Private Member Functions</h2></td></tr>
617
617
  </table>
618
618
  </div><div class="memdoc">
619
619
 
620
- <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00439">439</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
621
- <div class="fragment"><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;{</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; std::smatch matches;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; std::regex LHSReg(<span class="stringliteral">&quot;\\s*(.*)&quot;</span>);</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordtype">size_t</span> pos;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> word;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; std::regex_search(LHS, matches, LHSReg);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; LHS = matches.str(1);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; delimiter = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">while</span> ((pos = LHS.find(delimiter)) != std::string::npos)</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; word = LHS.substr(0, pos);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; LHS.erase(0, pos + delimiter.length());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; normalProd.push_back(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(word));</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; normalProd.push_back(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(LHS));</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;}</div><div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
620
+ <p class="definition">Definition at line <a class="el" href="CFGNormalizer_8cpp_source.html#l00438">438</a> of file <a class="el" href="CFGNormalizer_8cpp_source.html">CFGNormalizer.cpp</a>.</p>
621
+ <div class="fragment"><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;{</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; std::smatch matches;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; std::regex LHSReg(<span class="stringliteral">&quot;\\s*(.*)&quot;</span>);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordtype">size_t</span> pos;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> word;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; std::regex_search(LHS, matches, LHSReg);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; LHS = matches.str(1);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; delimiter = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">while</span> ((pos = LHS.find(delimiter)) != std::string::npos)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; word = LHS.substr(0, pos);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; LHS.erase(0, pos + delimiter.length());</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; normalProd.push_back(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(word));</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; normalProd.push_back(grammar-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">str2Symbol</a>(LHS));</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;}</div><div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
622
622
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a5c081c6ff0501fc91b71352995d6d9dc"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a5c081c6ff0501fc91b71352995d6d9dc">SVF::GrammarBase::str2Symbol</a></div><div class="ttdeci">Symbol str2Symbol(const std::string str) const</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00074">CFLGrammar.cpp:74</a></div></div>
623
623
  </div><!-- fragment -->
624
624
  </div>