﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-lwch-随笔分类-NScript</title><link>http://www.cppblog.com/lwch/category/14125.html</link><description>【QQ:510134884】【编译原理交流群:83905136】【NScript项目群:38843264】【Email:lwch4@163.com】</description><language>zh-cn</language><lastBuildDate>Tue, 08 Feb 2011 00:24:26 GMT</lastBuildDate><pubDate>Tue, 08 Feb 2011 00:24:26 GMT</pubDate><ttl>60</ttl><item><title>使用内联汇编动态调用DLL</title><link>http://www.cppblog.com/lwch/archive/2011/02/06/139767.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sun, 06 Feb 2011 14:21:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2011/02/06/139767.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/139767.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2011/02/06/139767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/139767.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/139767.html</trackback:ping><description><![CDATA[1.首先我们必须知道C语言的调用约定为<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 14px; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left">__cdecl</span></span>(即参数从右向左依次进栈,由调用者还原堆栈).<br>2.一条push指令最多压入4个字节,当不足4个字节时应补齐4个字节,超过4个字节时应该由低位到高位依次压栈.<br>3.pop指令也和push一样一次只能弹出4个字节.<br>4.我们需要一个CallStruct类型来储存一个参数.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CallStruct<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bool;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOUBLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Real;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[MAX_STRING];<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000">&nbsp;TYPE<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctInteger,<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctString,<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctBool,<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctReal,<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctVoid,<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}Type;<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CallStruct()&nbsp;:&nbsp;Integer(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">),Bool(FALSE),Real(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CallStruct(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">VirtualMachine::VarClass</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;Var)&nbsp;:&nbsp;Integer(Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Integer),Bool(Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Bool),Real(Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Real),Type((TYPE)Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Type)<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(Type&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;ctString)&nbsp;wcscpy(String,Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">String);<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};</span></div>
5.我们需要一个列表来存放参数和一个返回值对象来存放返回值.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">CallStruct</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;VarList;<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">CallStruct</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;Return;</span></div>
6.最后我们需要一个HMODULE和一个FARPROC分别存放dll的句柄和函数地址.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HMODULE&nbsp;hModule;<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;FARPROC&nbsp;FunctionPtr;</span></div>
7.然后我们添加几个功能函数.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;AddVar(NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">VirtualMachine::VarClass</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;Var);<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;SetReturnType(CallStruct::TYPE&nbsp;Type);<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;SetLibName(LPTSTR&nbsp;Name);<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;SetFunctionName(LPTSTR&nbsp;Name);</span></div>
<span style="COLOR: red">注意:GetProcAddress第二个参数只接受LPCSTR类型的字符串,应此如果传入的是Unicode编码的字符必须将其转换成ANSI的.<br></span>8.我们添加一个函数Run用于调用函数.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">BOOL&nbsp;CallMacro::Run()<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(FunctionPtr&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;Return.Buffer()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;RealStruct<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;Real;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Head,Tail;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">CallStruct</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;cs;<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Integer;<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;Bool;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;RealStruct&nbsp;Real;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Push指令一次只能压入4字节</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;String;<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;iEsp;<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;mov&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ptr[iEsp],esp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;保存esp</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">VarList.Size();i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;VarList[i];<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cs</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Integer;<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bool&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cs</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Bool;<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Real.Real&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cs</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Real;<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cs</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">String;<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(cs</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Type)<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;CallStruct::ctInteger:<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;push&nbsp;Integer;<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;CallStruct::ctString:<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;push&nbsp;String;<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;CallStruct::ctBool:<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;push&nbsp;Bool;<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;CallStruct::ctReal:<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;push&nbsp;Real.Tail;<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;push&nbsp;Real.Head;<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;FARPROC&nbsp;proc&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FunctionPtr;<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Head,Tail;<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;__asm<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;proc<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ptr[Head],edx<br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ptr[Tail],eax<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(Return</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Type)<br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;CallStruct::ctInteger:<br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Integer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Tail;<br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;CallStruct::ctString:<br></span><span style="COLOR: #008080">58</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wcscpy(Return</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">String,(LPCTSTR)Tail);<br></span><span style="COLOR: #008080">59</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">60</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;CallStruct::ctBool:<br></span><span style="COLOR: #008080">61</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Bool&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Tail;<br></span><span style="COLOR: #008080">62</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">63</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;CallStruct::ctReal:<br></span><span style="COLOR: #008080">64</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;fstp&nbsp;[Real.Real];<br></span><span style="COLOR: #008080">65</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Real&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Real.Real;<br></span><span style="COLOR: #008080">66</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">67</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">68</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;__declspec调用约定,需要手工还原堆栈</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">69</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;mov&nbsp;esp,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ptr[iEsp];<br></span><span style="COLOR: #008080">70</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br></span><span style="COLOR: #008080">71</span>&nbsp;<span style="COLOR: #000000">}</span></div>
Run函数首先检查是否已经装载了DLL并获得了函数地址,以及返回值类型是否已经定义.<br>然后根据类型依次将函数压栈.<br>然后调用call指令并保存返回值.(这里需要注意的是<span style="COLOR: red">当返回值类型为double或float类型时必须使用fstp指令从FPU寄存器栈的栈顶的值取出来</span>)<br>最后还原堆栈.<br><br>然后我们来测试一下.<br>创建一个名为TestDLL的DLL工程并添加函数Test.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">TESTDLL_API&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;Test(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;d,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;d1,WCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;lpBuffer)<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(d&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">123.456789</span><span style="COLOR: #000000">)&nbsp;MessageBox(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,lpBuffer,L</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">d1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">789.654</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">77777</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">6</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<br>然后创建一个测试工程,添加相关文件.<br>在_tmain中添加以下代码.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;d;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CallMacro&nbsp;cm;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">VirtualMachine::VarClass</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;Var;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Var&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;VirtualMachine::VarClass;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;VirtualMachine::VarClass::vtString;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wcscpy(Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">String,L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">aaaaa</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cm.AddVar(Var);<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Var&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;VirtualMachine::VarClass;<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;VirtualMachine::VarClass::vtInteger;<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Integer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(INT)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">d;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cm.AddVar(Var);<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Var&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;VirtualMachine::VarClass;<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;VirtualMachine::VarClass::vtReal;<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Var</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Real&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">123.456789</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cm.AddVar(Var);<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cm.SetLibName(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TestDll.dll</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cm.SetFunctionName(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cm.SetReturnType(CallMacro::CallStruct::ctReal);<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cm.Run();<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wprintf(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%f&nbsp;%f\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,d,cm.Return</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Real);<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<br>编译并运行,可以看到Test函数调用成功,并成功输出d的值和返回值.<br><br>最后给出<a href="http://www.cppblog.com/Files/lwch/DLLTest.rar">完整代码</a>.<img src ="http://www.cppblog.com/lwch/aggbug/139767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2011-02-06 22:21 <a href="http://www.cppblog.com/lwch/archive/2011/02/06/139767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用面向组合子算法写词法分析器</title><link>http://www.cppblog.com/lwch/archive/2011/01/26/139377.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Wed, 26 Jan 2011 14:11:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2011/01/26/139377.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/139377.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2011/01/26/139377.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/139377.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/139377.html</trackback:ping><description><![CDATA[继<a href="http://www.cppblog.com/lwch/archive/2011/01/22/139121.html" target=_blank>《面向组合子的一些测试》</a> 进一步完善代码,制作出词法分析器.<br><br>我们首先需要一个Fail基类,他有一个纯虚函数Parser.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Fail<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;NWString&nbsp;Parser(NWString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;input)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">};</span></div>
Parser的输入为要分析的字符串,输出为分析完成后剩余的字符串.<br><br>然后我们需要一个Ch和一个Str分别用来分析单个字符和一个字符串.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Ch&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Fail<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Ch(WCHAR&nbsp;_value)&nbsp;:&nbsp;value(_value){}<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;Parser(NWString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;input);<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;Value();<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;value;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;待匹配串</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Str&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Fail<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Str(NWString&nbsp;_value)&nbsp;:&nbsp;value(_value){}<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;Parser(NWString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;input);<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;value;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;待匹配串</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">};</span></div>
<br>然后是Seq,Alt和Any,分别表示组合,选择和循环.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Seq&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Fail<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Seq(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;_left,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;_right)&nbsp;:&nbsp;left(_left),right(_right){}<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;Parser(NWString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;input);<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;left;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;right;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Alt&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Fail<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Alt(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;_left,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;_right)&nbsp;:&nbsp;left(_left),right(_right){}<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;Parser(NWString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;input);<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;left;<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;right;<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Any&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Fail<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Any(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;_left,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_count)&nbsp;:&nbsp;left(_left),count(_count){}<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;Parser(NWString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;input);<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;left;<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;count;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">};</span></div>
<br>最后我们需要一个Node类型来存放以上这几类对象.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Node<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Node(){}<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Node(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;_left)&nbsp;:&nbsp;left(_left){}<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;left,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;right);<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;left,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;right);<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;left,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;right);<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;OnceMore(NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;node);<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;More(NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;node);<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;NewCh(WCHAR&nbsp;input);<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;NewStr(NWString&nbsp;input);<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;Parser(NWString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;input);<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;Value();<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Fail</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;left;<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">};</span></div>
下面来分析一下Node里的函数:<br>+:对应于Seq,用于将两个Node连接起来.<br>|:对应与Alt,用于选择两个Node.<br>-:只有left和right的Value()都是NAutoPtr&lt;Ch&gt;时才可使用,内部有类型转换,表示从哪个字符到哪个字符.<br>OnceMore:重复1次及以上.<br>More:重复0次以上.<br>NewCh:生成一个NAutoPtr&lt;Ch&gt;的Node对象.<br>NewStr:生成一个NAutoPtr&lt;Str&gt;的Node对象.<br><br>下面我们需要4个宏.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;ONCEMORE(N)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node::OnceMore(N)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;MORE(N)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node::More(N)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;NEWCH(N)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node::NewCh(N)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;NEWSTR(N)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node::NewStr(N)</span></div>
这4个宏仅为了输入方便<br><br>然后我们来测试一下:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;Symbol&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ONCEMORE(NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">_</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">z</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;(NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Z</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;MORE(NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">_</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;(NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;(NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">z</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;(NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Z</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)));<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;Number&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ONCEMORE(NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Node</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;Real&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Number&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;NEWCH(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;Number;</span></div>
相信对正则表达式有一定认识的同学已经知道这3条语句分别对应于什么正则表达式.<br><span style="COLOR: red">Symbol-&gt;[_a-zA-Z]+[_0-9a-zA-Z]*<br>Number-&gt;[0-9]+<br>Real-&gt;[0-9]+.[0-9]+<br></span><br>定义一个待分析的字符串.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;str&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abcce_fg123.459agetr</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span></div>
<br>对其分析.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wprintf(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,str);<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wprintf(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,Symbol</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Parser(str));<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wprintf(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,Real</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Parser(str));<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wprintf(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,Symbol</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Parser(str));</span></div>
<br>分析结果.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">abcce_fg123.459agetr<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">123</span><span style="COLOR: #000000">.459agetr<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">agetr<br></span><span style="COLOR: #008080">4</span>&nbsp;</div>
<br>因为没有考虑分析效率问题,所以使用NWString作为输入和输出,在实际使用中可用LPTSTR来代替NWString,同时修改响应代码.<br>最后给出<a href="http://www.cppblog.com/Files/lwch/RegexEngine.rar">源代码</a><img src ="http://www.cppblog.com/lwch/aggbug/139377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2011-01-26 22:11 <a href="http://www.cppblog.com/lwch/archive/2011/01/26/139377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面向组合子的一些测试</title><link>http://www.cppblog.com/lwch/archive/2011/01/22/139121.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 22 Jan 2011 09:11:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2011/01/22/139121.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/139121.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2011/01/22/139121.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/139121.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/139121.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文的思路来源于http://www.cppblog.com/vczh/archive/2008/05/21/50656.html首先先看代码:&nbsp;&nbsp;1&nbsp;#include&nbsp;&lt;stdio.h&gt;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3&nbsp;class&nbsp;Element&nbsp;&nbsp;4&nbsp;{&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/lwch/archive/2011/01/22/139121.html'>阅读全文</a><img src ="http://www.cppblog.com/lwch/aggbug/139121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2011-01-22 17:11 <a href="http://www.cppblog.com/lwch/archive/2011/01/22/139121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NScript部分数据结构</title><link>http://www.cppblog.com/lwch/archive/2011/01/14/138541.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Fri, 14 Jan 2011 08:00:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2011/01/14/138541.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/138541.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2011/01/14/138541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/138541.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/138541.html</trackback:ping><description><![CDATA[下面来分析一下<a href="http://nscript.codeplex.com/" target=_blank>NScript</a>的部分数据结构<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;SyntaxNode<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Op1;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Op2;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">NAutoPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">SyntaxNode</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;Child;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SyntaxNode(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;O1,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;O2)&nbsp;:&nbsp;Op1(O1),Op2(O2){}<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CharClass<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Index;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NWString&nbsp;String;<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CharClass(NWString&nbsp;S)&nbsp;:&nbsp;String(S){}<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};</span></div>
<br>每个语法树的节点有2个参数Op1,Op2分别表示当前节点的类型和附加参数<br>Child为当前节点的子节点<br><br>CharClass结构则比较简单分别为索引和字符<br><br>然后是部分SyntaxNode的Op1的枚举:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000">&nbsp;OpCode_Type<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opNull,<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opVar,<br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opConst,<br></span><span style="COLOR: #008080">6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};</span></div>
<br>以及VarType的枚举:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000">&nbsp;Var_Type<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtNull,<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtVoid,<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtBool,<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtInt,<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtReal,<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtString,<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vtSymbol,<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};</span></div>
和产生式索引的宏定义:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_VOID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_INT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_REAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_STRING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_STRING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_SYMBOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_REAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_DIGIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_TRUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_FALSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11</span></div>
<br>以上索引的定义取自NS.txt,随着以后文法的增加这里的索引定义也会增加<br>NS.h,NS.cpp,NS.ParserTable均是由NScriptMacro.exe运行NS.txt生成的<br><br>下面来看一下SyntaxAnalyze函数:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">BOOL&nbsp;NSyntax::SyntaxAnalyze(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i)<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bResult&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;根据产生式索引生成语法树</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(i)<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_VOID:<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_BOOL:<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_INT:<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_REAL:<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VARTYPE_STRING:<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bResult&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;VarType(i);<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_STRING:<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_SYMBOL:<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_REAL:<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_DIGIT:<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_TRUE:<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;INDEX_VALUETYPE_FALSE:<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bResult&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ValueType(i);<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;bResult;<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<br>这个函数根据传入参数(产生式索引)调用相关函数生成语法树,具体语法树的生成过程请看<a href="http://nscript.codeplex.com/" target=_blank>相关代码</a> <img src ="http://www.cppblog.com/lwch/aggbug/138541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2011-01-14 16:00 <a href="http://www.cppblog.com/lwch/archive/2011/01/14/138541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源编译器项目NScript</title><link>http://www.cppblog.com/lwch/archive/2011/01/13/138484.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Thu, 13 Jan 2011 13:38:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2011/01/13/138484.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/138484.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2011/01/13/138484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/138484.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/138484.html</trackback:ping><description><![CDATA[<a href="http://nscript.codeplex.com/" target=_blank>项目地址</a><br><br>最初文法定义为:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">void</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bool</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">real</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">string</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">true</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">false</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">and</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">not</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">or</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">start&nbsp;program;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">var_type&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">void</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bool</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">real</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">string</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">value_type&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{real}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{digit}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">true</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">false</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">paramter_define_desc&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{LQ}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;paramter_defines&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{RQ}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{LQ}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{RQ}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">paramter_defines&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;paramter_defines&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;paramter_one<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;paramter_one<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">paramter_one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;var_type&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">assign_type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item_list<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">item_list&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item_list&nbsp;item<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;function<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;define_desc&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">stmt_list&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stmt_list&nbsp;stmt<br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stmt<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000">stmt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;define_desc&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;assign_desc&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">58</span>&nbsp;<span style="COLOR: #000000">function&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;var_type&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;paramter_define_desc&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;stmt_list&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">59</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;var_type&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;paramter_define_desc&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">60</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">61</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">62</span>&nbsp;<span style="COLOR: #000000">define_desc&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;define_desc&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">63</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;var_type&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">64</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">65</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">66</span>&nbsp;<span style="COLOR: #000000">assign_desc&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;assign_type&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp<br></span><span style="COLOR: #008080">67</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">68</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">69</span>&nbsp;<span style="COLOR: #000000">exp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">70</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">71</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">72</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">73</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">74</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">and</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">75</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">or</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">76</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">not</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">77</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">78</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1<br></span><span style="COLOR: #008080">79</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp1<br></span><span style="COLOR: #008080">80</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">81</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">82</span>&nbsp;<span style="COLOR: #000000">exp1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp1&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp2<br></span><span style="COLOR: #008080">83</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp1&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp2<br></span><span style="COLOR: #008080">84</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp2<br></span><span style="COLOR: #008080">85</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">86</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">87</span>&nbsp;<span style="COLOR: #000000">exp2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp2&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp3<br></span><span style="COLOR: #008080">88</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp2&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp3<br></span><span style="COLOR: #008080">89</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp3<br></span><span style="COLOR: #008080">90</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">91</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">92</span>&nbsp;<span style="COLOR: #000000">exp3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{LQ}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{RQ}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">93</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;value_type<br></span><span style="COLOR: #008080">94</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span></div>
<br>由以上文法中仅有函数的定义和变量的定义<br>有点类C的味道.<br>已成功将ESLanguage大部分代码移植到这个项目里. <img src ="http://www.cppblog.com/lwch/aggbug/138484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2011-01-13 21:38 <a href="http://www.cppblog.com/lwch/archive/2011/01/13/138484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已完成语法分析器</title><link>http://www.cppblog.com/lwch/archive/2010/08/30/125289.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Mon, 30 Aug 2010 09:29:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/08/30/125289.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/125289.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/08/30/125289.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/125289.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/125289.html</trackback:ping><description><![CDATA[<p>分析器文法:</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%token</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%start</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">start&nbsp;program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item_list<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">item_list&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item_list&nbsp;item<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;token_def&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;start_def&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rule_def&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">token_def&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;token_def&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%token</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">start_def&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%start</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">rule_def&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;rhs_list<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">rhs_list&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rhs_list&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;rhs<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rhs<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">rhs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rhs&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rhs&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000"></span></div>
<a title=NScriptMacro href="http://www.cppblog.com/Files/lwch/NScriptMacro.rar">NScriptMacro</a> <br>主要用来将给定的文法文件转化为LALR(1)分析表,生成的cpp和h文件可使用分析器分析,out文件是语法分析表<br>里面有个简单的CMinus的例子
<img src ="http://www.cppblog.com/lwch/aggbug/125289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-08-30 17:29 <a href="http://www.cppblog.com/lwch/archive/2010/08/30/125289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现分析器自动生成分析表</title><link>http://www.cppblog.com/lwch/archive/2010/08/28/125052.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 28 Aug 2010 07:28:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/08/28/125052.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/125052.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/08/28/125052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/125052.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/125052.html</trackback:ping><description><![CDATA[对于给定文法文件:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">if</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">then</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">else</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">end</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">st</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">start&nbsp;program&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;if_stmt<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">if_stmt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">if</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">then</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;stmt&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">end</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">if</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">then</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;stmt&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">else</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;stmt&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">end</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">exp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp1<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">exp1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp1&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp2<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp2<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">exp2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp2&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp3<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;exp3<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">exp3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{LQ}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;exp1&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{RQ}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{digit}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">stmt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">st</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span></div>
生成分析表得:<br><img height=768 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/0000000000.PNG" width=985 border=0>
<img src ="http://www.cppblog.com/lwch/aggbug/125052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-08-28 15:28 <a href="http://www.cppblog.com/lwch/archive/2010/08/28/125052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改分析器的分析器的语法</title><link>http://www.cppblog.com/lwch/archive/2010/08/28/125051.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 28 Aug 2010 07:23:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/08/28/125051.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/125051.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/08/28/125051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/125051.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/125051.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%token</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%start</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">token&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">start&nbsp;program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item_list<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">item_list&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item_list&nbsp;item<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;item<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;token_def&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;start_def&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rule_def&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">token_def&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;token_def&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%token</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">start_def&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%start</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">rule_def&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;rhs_list<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">rhs_list&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rhs_list&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;rhs<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rhs<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">rhs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rhs&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;rhs&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{String}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{Symbol}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000"></span></div>
去除了letter定义,暂时还不支持正则表达式..
<img src ="http://www.cppblog.com/lwch/aggbug/125051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-08-28 15:23 <a href="http://www.cppblog.com/lwch/archive/2010/08/28/125051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的语法分析器的分析器的基本语法和分析表</title><link>http://www.cppblog.com/lwch/archive/2010/08/03/122098.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Tue, 03 Aug 2010 12:21:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/08/03/122098.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/122098.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/08/03/122098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/122098.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/122098.html</trackback:ping><description><![CDATA[<p>基本语法:</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">%token&nbsp;&nbsp;&nbsp;&nbsp;"%token"&nbsp;"%letter"&nbsp;"%start"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">%token&nbsp;&nbsp;&nbsp;&nbsp;":"&nbsp;";"&nbsp;"-&gt;"&nbsp;"|"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">%letter&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;"{string}"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">%letter&nbsp;symbol&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;"{symbol}"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">%start&nbsp;program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">string_list&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;string_list&nbsp;string<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;string<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">symbol_list&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;symbol_list&nbsp;symbol<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;symbol<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;item_list<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">item_list&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;item_list&nbsp;item<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;item<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;token_def&nbsp;";"<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;letter_def&nbsp;";"<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;start_def&nbsp;";"<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;rule_def&nbsp;";"<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;";"<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">token_def&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;"%token"&nbsp;string_list<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">letter_def&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;"%letter"&nbsp;symbol&nbsp;":"&nbsp;string_list<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">start_def&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;"%start"&nbsp;symbol<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">rule_def&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;symbol&nbsp;"-&gt;"&nbsp;rhs_list<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000">rhs_list&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;rhs_list&nbsp;"|"&nbsp;rhs<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;rhs<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">rhs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;term_list<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000">term_list&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;term_list&nbsp;string<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;term_list&nbsp;symbol<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;string<br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;symbol<br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span></div>
<br><br>生成的分析表:<br>由于状态数量和非终结符数量过多,所以给出文件<a href="http://www.cppblog.com/Files/lwch/ParserTable001.txt">《分析表》</a> <br><br>下面是四则混合运算的文法文件:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">%token&nbsp;"+"&nbsp;"-"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">%token&nbsp;"*"&nbsp;"/"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">%token&nbsp;"("&nbsp;")"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">%letter&nbsp;AddOp&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;"+"&nbsp;"-"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">%letter&nbsp;MulOp&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;"*"&nbsp;"/"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">%letter&nbsp;ID&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;"{digit}"&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">%letter&nbsp;LQ&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;"("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">%letter&nbsp;RQ&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;")"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">%start&nbsp;Program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">Program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;Exp<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">Exp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;Exp&nbsp;AddOp&nbsp;Term<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;Term<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">Term&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;Term&nbsp;MulOp&nbsp;Factor<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;Factor<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">Factor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;LQ&nbsp;Exp&nbsp;RQ<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;ID<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;</span></div>
<img src ="http://www.cppblog.com/lwch/aggbug/122098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-08-03 20:21 <a href="http://www.cppblog.com/lwch/archive/2010/08/03/122098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现从语法树到四元码的生成</title><link>http://www.cppblog.com/lwch/archive/2010/08/01/121824.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 31 Jul 2010 17:05:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/08/01/121824.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/121824.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/08/01/121824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/121824.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/121824.html</trackback:ping><description><![CDATA[对于给定表达式:<br>123 * 567 + 456 * (789 + 456)<br>生成四元码得:<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/VirtualCode001.PNG" width=669 border=0><br><br>对于表达式:<br>123 + 456 * (789 + 456) / 123 + 789<br>生成四元码得:<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/VirtualCode002.PNG" width=669 border=0>
<img src ="http://www.cppblog.com/lwch/aggbug/121824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-08-01 01:05 <a href="http://www.cppblog.com/lwch/archive/2010/08/01/121824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现一个四则混合运算分析器</title><link>http://www.cppblog.com/lwch/archive/2010/07/26/121295.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Mon, 26 Jul 2010 03:41:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/26/121295.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/121295.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/26/121295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/121295.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/121295.html</trackback:ping><description><![CDATA[对于式子:10 + (5 + 9) / 3 - 7 * 3<br>求解过程如下:<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/size.PNG" width=669 border=0>&nbsp;<br><br>主要在规约过程中增加了调用相关语义处理函数来实现计算.
<img src ="http://www.cppblog.com/lwch/aggbug/121295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-26 11:41 <a href="http://www.cppblog.com/lwch/archive/2010/07/26/121295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>四则混合运算分析表</title><link>http://www.cppblog.com/lwch/archive/2010/07/24/121204.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 24 Jul 2010 15:35:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/24/121204.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/121204.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/24/121204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/121204.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/121204.html</trackback:ping><description><![CDATA[<img height=534 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/ParserTable0001.PNG" width=768 border=0>
<img src ="http://www.cppblog.com/lwch/aggbug/121204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-24 23:35 <a href="http://www.cppblog.com/lwch/archive/2010/07/24/121204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Precept和NV类的封装</title><link>http://www.cppblog.com/lwch/archive/2010/07/22/121069.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Thu, 22 Jul 2010 15:23:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/22/121069.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/121069.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/22/121069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/121069.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/121069.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1&nbsp;#pragma&nbsp;once&nbsp;&nbsp;2&nbsp;#include&nbsp;"..\String\NWString.h"&nbsp;&nbsp;3&nbsp;#include&nbsp;"..\AutoPtr\AutoPtr.h"&nbsp;&nbsp;4&nbsp;#include&nbsp;"..\Common\List.h"&nb...&nbsp;&nbsp;<a href='http://www.cppblog.com/lwch/archive/2010/07/22/121069.html'>阅读全文</a><img src ="http://www.cppblog.com/lwch/aggbug/121069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-22 23:23 <a href="http://www.cppblog.com/lwch/archive/2010/07/22/121069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LALR(1)对于冲突的解决方案</title><link>http://www.cppblog.com/lwch/archive/2010/07/22/121034.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Thu, 22 Jul 2010 07:04:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/22/121034.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/121034.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/22/121034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/121034.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/121034.html</trackback:ping><description><![CDATA[1.对于典型的if-else二义性文法,存在移进-接受(移进-归约)冲突,在我的LALR分析器中采用了和YACC相同的方法,首先处理移进操作.这样就可消除if-else的二义性.<br>if-else文法:<br>S-&gt;iEStS<br>S-&gt;iES<br>S-&gt;s<br>E-&gt;e<br>说明:<br>i代表if<br>s代表stmt<br>e代表exp<br>t代表else<br>对于以上文法生成的LALR(1)分析表为:<br><img height=534 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/iestsParserTable.PNG" width=768 border=0><br><br>对于if exp stmt语句分析结果为:<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/ies.PNG" width=669 border=0><br><br>对于if exp stmt else stmt语句分析结果为:<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/iests.PNG" width=669 border=0><br><br>对于if exp if exp stmt语句分析结果为:<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/ieies.PNG" width=669 border=0><br><br>对于if exp if exp stmt else stmt语句分析结果为:<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/ieiests.PNG" width=669 border=0><br><br>2.众所周知LALR文法同样存在归约-归约冲突,在我的LALR分析器中使用先书写的产生式进行归约.<br>对于给定的存在归约-归约冲突的文法:<br>S-&gt;T<br>S-&gt;i<br>T-&gt;i<br><br>生成LALR(1)分析表为:<br><img height=534 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/reducereduceParserTable.PNG" width=768 border=0><br><br>分析输入串i的过程为:<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/reducereduce.PNG" width=669 border=0><br><br>以上就是我的LALR(1)分析器处理冲突的方法了. <br>下面逐步对这个分析器进行扩充,以实现一个能自由输入文法的分析器.
<img src ="http://www.cppblog.com/lwch/aggbug/121034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-22 15:04 <a href="http://www.cppblog.com/lwch/archive/2010/07/22/121034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现LALR(1)分析器</title><link>http://www.cppblog.com/lwch/archive/2010/07/21/120985.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Wed, 21 Jul 2010 12:24:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/21/120985.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/120985.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/21/120985.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/120985.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/120985.html</trackback:ping><description><![CDATA[对于给定文法:<br>E-&gt;E+T<br>E-&gt;E-T<br>E-&gt;T<br>T-&gt;T*F<br>T-&gt;T/F<br>T-&gt;F<br>F-&gt;(E)<br>F-&gt;i<br>生成LALR(1)分析表为:<br><img height=534 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/LALR1ParserTable.PNG" width=768 border=0>&nbsp;<br><br>对指定串:(i+i)*i和(i+i)*分别分析后得到<br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/LALR1Parser1.PNG" width=669 border=0><br><img height=438 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/LALR1Parser2.PNG" width=669 border=0><br><br>虽说打印的时候没对齐,但结果是对的.. 
<img src ="http://www.cppblog.com/lwch/aggbug/120985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-21 20:24 <a href="http://www.cppblog.com/lwch/archive/2010/07/21/120985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LR(0),SLR(1),LR(1)分析器源码</title><link>http://www.cppblog.com/lwch/archive/2010/07/18/120713.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sun, 18 Jul 2010 10:02:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/18/120713.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/120713.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/18/120713.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/120713.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/120713.html</trackback:ping><description><![CDATA[<p><a title=分析器 href="http://www.cppblog.com/Files/lwch/LR.rar">分析器</a><a title=分析器 href="http://www.cppblog.com/Files/lwch/LR.rar"></a></p>
LR项目内有一宏定义可定义为LR0或SLR1<br>LR1分析器分析速度过慢有待优化.. <br>求Follow集用了非递归算法,发现递归算法容易引起无限循环.<br>希望对正在学习编译原理的同学有所启发. 
<img src ="http://www.cppblog.com/lwch/aggbug/120713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-18 18:02 <a href="http://www.cppblog.com/lwch/archive/2010/07/18/120713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现LR(1)分析表的自动创建</title><link>http://www.cppblog.com/lwch/archive/2010/07/17/120624.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 17 Jul 2010 05:59:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/17/120624.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/120624.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/17/120624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/120624.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/120624.html</trackback:ping><description><![CDATA[对于给定文法:<br>E-&gt;E+T<br>E-&gt;E-T<br>E-&gt;T<br>T-&gt;T*F<br>T-&gt;T/F<br>T-&gt;F<br>F-&gt;(E)<br>F-&gt;i<br>生成LR(1)分析表得:<br><img height=534 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/LR1ParserTable1.PNG" width=768 border=0><br><img height=534 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/LR1ParserTable2.PNG" width=768 border=0><br><br>LR(1)分析表的确是无比的巨大啊...
<img src ="http://www.cppblog.com/lwch/aggbug/120624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-17 13:59 <a href="http://www.cppblog.com/lwch/archive/2010/07/17/120624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现LR(1)DFA状态机的自动创建</title><link>http://www.cppblog.com/lwch/archive/2010/07/16/120553.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Fri, 16 Jul 2010 08:03:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/16/120553.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/120553.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/16/120553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/120553.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/120553.html</trackback:ping><description><![CDATA[<p>对于给定文法:<br>E-&gt;E+T<br>E-&gt;E-T<br>E-&gt;T<br>T-&gt;T*F<br>T-&gt;T/F<br>T-&gt;F<br>F-&gt;(E)<br>F-&gt;i<br>生成DFA状态机得:</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;&nbsp;1</span>&nbsp;<span style="COLOR: #000000">该文法的拓展文法为：<br></span><span style="COLOR: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="COLOR: #000000">$-&gt;E<br></span><span style="COLOR: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="COLOR: #000000">E-&gt;E+T<br></span><span style="COLOR: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="COLOR: #000000">E-&gt;E-T<br></span><span style="COLOR: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="COLOR: #000000">E-&gt;T<br></span><span style="COLOR: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="COLOR: #000000">T-&gt;T*F<br></span><span style="COLOR: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="COLOR: #000000">T-&gt;T/F<br></span><span style="COLOR: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="COLOR: #000000">T-&gt;F<br></span><span style="COLOR: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="COLOR: #000000">F-&gt;(E)<br></span><span style="COLOR: #008080">&nbsp;10</span>&nbsp;<span style="COLOR: #000000">F-&gt;i<br></span><span style="COLOR: #008080">&nbsp;11</span>&nbsp;<span style="COLOR: #000000">该文法的项目如下：<br></span><span style="COLOR: #008080">&nbsp;12</span>&nbsp;<span style="COLOR: #000000">(1)&nbsp;$-&gt;.E,#<br></span><span style="COLOR: #008080">&nbsp;13</span>&nbsp;<span style="COLOR: #000000">(2)&nbsp;E-&gt;.E+T,#<br></span><span style="COLOR: #008080">&nbsp;14</span>&nbsp;<span style="COLOR: #000000">(3)&nbsp;E-&gt;.E-T,#<br></span><span style="COLOR: #008080">&nbsp;15</span>&nbsp;<span style="COLOR: #000000">(4)&nbsp;E-&gt;.T,#<br></span><span style="COLOR: #008080">&nbsp;16</span>&nbsp;<span style="COLOR: #000000">(5)&nbsp;E-&gt;.E+T,+<br></span><span style="COLOR: #008080">&nbsp;17</span>&nbsp;<span style="COLOR: #000000">(6)&nbsp;E-&gt;.E-T,+<br></span><span style="COLOR: #008080">&nbsp;18</span>&nbsp;<span style="COLOR: #000000">(7)&nbsp;E-&gt;.T,+<br></span><span style="COLOR: #008080">&nbsp;19</span>&nbsp;<span style="COLOR: #000000">(8)&nbsp;E-&gt;.E+T,-<br></span><span style="COLOR: #008080">&nbsp;20</span>&nbsp;<span style="COLOR: #000000">(9)&nbsp;E-&gt;.E-T,-<br></span><span style="COLOR: #008080">&nbsp;21</span>&nbsp;<span style="COLOR: #000000">(10)&nbsp;E-&gt;.T,-<br></span><span style="COLOR: #008080">&nbsp;22</span>&nbsp;<span style="COLOR: #000000">(11)&nbsp;T-&gt;.T*F,#<br></span><span style="COLOR: #008080">&nbsp;23</span>&nbsp;<span style="COLOR: #000000">(12)&nbsp;T-&gt;.T/F,#<br></span><span style="COLOR: #008080">&nbsp;24</span>&nbsp;<span style="COLOR: #000000">(13)&nbsp;T-&gt;.F,#<br></span><span style="COLOR: #008080">&nbsp;25</span>&nbsp;<span style="COLOR: #000000">(14)&nbsp;T-&gt;.T*F,+<br></span><span style="COLOR: #008080">&nbsp;26</span>&nbsp;<span style="COLOR: #000000">(15)&nbsp;T-&gt;.T/F,+<br></span><span style="COLOR: #008080">&nbsp;27</span>&nbsp;<span style="COLOR: #000000">(16)&nbsp;T-&gt;.F,+<br></span><span style="COLOR: #008080">&nbsp;28</span>&nbsp;<span style="COLOR: #000000">(17)&nbsp;T-&gt;.T*F,-<br></span><span style="COLOR: #008080">&nbsp;29</span>&nbsp;<span style="COLOR: #000000">(18)&nbsp;T-&gt;.T/F,-<br></span><span style="COLOR: #008080">&nbsp;30</span>&nbsp;<span style="COLOR: #000000">(19)&nbsp;T-&gt;.F,-<br></span><span style="COLOR: #008080">&nbsp;31</span>&nbsp;<span style="COLOR: #000000">(20)&nbsp;T-&gt;.T*F,*<br></span><span style="COLOR: #008080">&nbsp;32</span>&nbsp;<span style="COLOR: #000000">(21)&nbsp;T-&gt;.T/F,*<br></span><span style="COLOR: #008080">&nbsp;33</span>&nbsp;<span style="COLOR: #000000">(22)&nbsp;T-&gt;.F,*<br></span><span style="COLOR: #008080">&nbsp;34</span>&nbsp;<span style="COLOR: #000000">(23)&nbsp;T-&gt;.T*F,/<br></span><span style="COLOR: #008080">&nbsp;35</span>&nbsp;<span style="COLOR: #000000">(24)&nbsp;T-&gt;.T/F,/<br></span><span style="COLOR: #008080">&nbsp;36</span>&nbsp;<span style="COLOR: #000000">(25)&nbsp;T-&gt;.F,/<br></span><span style="COLOR: #008080">&nbsp;37</span>&nbsp;<span style="COLOR: #000000">(26)&nbsp;F-&gt;.(E),#<br></span><span style="COLOR: #008080">&nbsp;38</span>&nbsp;<span style="COLOR: #000000">(27)&nbsp;F-&gt;.i,#<br></span><span style="COLOR: #008080">&nbsp;39</span>&nbsp;<span style="COLOR: #000000">(28)&nbsp;F-&gt;.(E),+<br></span><span style="COLOR: #008080">&nbsp;40</span>&nbsp;<span style="COLOR: #000000">(29)&nbsp;F-&gt;.i,+<br></span><span style="COLOR: #008080">&nbsp;41</span>&nbsp;<span style="COLOR: #000000">(30)&nbsp;F-&gt;.(E),-<br></span><span style="COLOR: #008080">&nbsp;42</span>&nbsp;<span style="COLOR: #000000">(31)&nbsp;F-&gt;.i,-<br></span><span style="COLOR: #008080">&nbsp;43</span>&nbsp;<span style="COLOR: #000000">(32)&nbsp;F-&gt;.(E),*<br></span><span style="COLOR: #008080">&nbsp;44</span>&nbsp;<span style="COLOR: #000000">(33)&nbsp;F-&gt;.i,*<br></span><span style="COLOR: #008080">&nbsp;45</span>&nbsp;<span style="COLOR: #000000">(34)&nbsp;F-&gt;.(E),/<br></span><span style="COLOR: #008080">&nbsp;46</span>&nbsp;<span style="COLOR: #000000">(35)&nbsp;F-&gt;.i,/<br></span><span style="COLOR: #008080">&nbsp;47</span>&nbsp;<span style="COLOR: #000000">(36)&nbsp;$-&gt;E.,#<br></span><span style="COLOR: #008080">&nbsp;48</span>&nbsp;<span style="COLOR: #000000">(37)&nbsp;E-&gt;E.+T,#<br></span><span style="COLOR: #008080">&nbsp;49</span>&nbsp;<span style="COLOR: #000000">(38)&nbsp;E-&gt;E.-T,#<br></span><span style="COLOR: #008080">&nbsp;50</span>&nbsp;<span style="COLOR: #000000">(39)&nbsp;E-&gt;E.+T,+<br></span><span style="COLOR: #008080">&nbsp;51</span>&nbsp;<span style="COLOR: #000000">(40)&nbsp;E-&gt;E.-T,+<br></span><span style="COLOR: #008080">&nbsp;52</span>&nbsp;<span style="COLOR: #000000">(41)&nbsp;E-&gt;E.+T,-<br></span><span style="COLOR: #008080">&nbsp;53</span>&nbsp;<span style="COLOR: #000000">(42)&nbsp;E-&gt;E.-T,-<br></span><span style="COLOR: #008080">&nbsp;54</span>&nbsp;<span style="COLOR: #000000">(43)&nbsp;E-&gt;T.,#<br></span><span style="COLOR: #008080">&nbsp;55</span>&nbsp;<span style="COLOR: #000000">(44)&nbsp;E-&gt;T.,+<br></span><span style="COLOR: #008080">&nbsp;56</span>&nbsp;<span style="COLOR: #000000">(45)&nbsp;E-&gt;T.,-<br></span><span style="COLOR: #008080">&nbsp;57</span>&nbsp;<span style="COLOR: #000000">(46)&nbsp;T-&gt;T.*F,#<br></span><span style="COLOR: #008080">&nbsp;58</span>&nbsp;<span style="COLOR: #000000">(47)&nbsp;T-&gt;T./F,#<br></span><span style="COLOR: #008080">&nbsp;59</span>&nbsp;<span style="COLOR: #000000">(48)&nbsp;T-&gt;T.*F,+<br></span><span style="COLOR: #008080">&nbsp;60</span>&nbsp;<span style="COLOR: #000000">(49)&nbsp;T-&gt;T./F,+<br></span><span style="COLOR: #008080">&nbsp;61</span>&nbsp;<span style="COLOR: #000000">(50)&nbsp;T-&gt;T.*F,-<br></span><span style="COLOR: #008080">&nbsp;62</span>&nbsp;<span style="COLOR: #000000">(51)&nbsp;T-&gt;T./F,-<br></span><span style="COLOR: #008080">&nbsp;63</span>&nbsp;<span style="COLOR: #000000">(52)&nbsp;T-&gt;T.*F,*<br></span><span style="COLOR: #008080">&nbsp;64</span>&nbsp;<span style="COLOR: #000000">(53)&nbsp;T-&gt;T./F,*<br></span><span style="COLOR: #008080">&nbsp;65</span>&nbsp;<span style="COLOR: #000000">(54)&nbsp;T-&gt;T.*F,/<br></span><span style="COLOR: #008080">&nbsp;66</span>&nbsp;<span style="COLOR: #000000">(55)&nbsp;T-&gt;T./F,/<br></span><span style="COLOR: #008080">&nbsp;67</span>&nbsp;<span style="COLOR: #000000">(56)&nbsp;T-&gt;F.,#<br></span><span style="COLOR: #008080">&nbsp;68</span>&nbsp;<span style="COLOR: #000000">(57)&nbsp;T-&gt;F.,+<br></span><span style="COLOR: #008080">&nbsp;69</span>&nbsp;<span style="COLOR: #000000">(58)&nbsp;T-&gt;F.,-<br></span><span style="COLOR: #008080">&nbsp;70</span>&nbsp;<span style="COLOR: #000000">(59)&nbsp;T-&gt;F.,*<br></span><span style="COLOR: #008080">&nbsp;71</span>&nbsp;<span style="COLOR: #000000">(60)&nbsp;T-&gt;F.,/<br></span><span style="COLOR: #008080">&nbsp;72</span>&nbsp;<span style="COLOR: #000000">(61)&nbsp;F-&gt;(.E),#<br></span><span style="COLOR: #008080">&nbsp;73</span>&nbsp;<span style="COLOR: #000000">(62)&nbsp;E-&gt;.E+T,)<br></span><span style="COLOR: #008080">&nbsp;74</span>&nbsp;<span style="COLOR: #000000">(63)&nbsp;E-&gt;.E-T,)<br></span><span style="COLOR: #008080">&nbsp;75</span>&nbsp;<span style="COLOR: #000000">(64)&nbsp;E-&gt;.T,)<br></span><span style="COLOR: #008080">&nbsp;76</span>&nbsp;<span style="COLOR: #000000">(65)&nbsp;T-&gt;.T*F,)<br></span><span style="COLOR: #008080">&nbsp;77</span>&nbsp;<span style="COLOR: #000000">(66)&nbsp;T-&gt;.T/F,)<br></span><span style="COLOR: #008080">&nbsp;78</span>&nbsp;<span style="COLOR: #000000">(67)&nbsp;T-&gt;.F,)<br></span><span style="COLOR: #008080">&nbsp;79</span>&nbsp;<span style="COLOR: #000000">(68)&nbsp;F-&gt;.(E),)<br></span><span style="COLOR: #008080">&nbsp;80</span>&nbsp;<span style="COLOR: #000000">(69)&nbsp;F-&gt;.i,)<br></span><span style="COLOR: #008080">&nbsp;81</span>&nbsp;<span style="COLOR: #000000">(70)&nbsp;F-&gt;(.E),+<br></span><span style="COLOR: #008080">&nbsp;82</span>&nbsp;<span style="COLOR: #000000">(71)&nbsp;F-&gt;(.E),-<br></span><span style="COLOR: #008080">&nbsp;83</span>&nbsp;<span style="COLOR: #000000">(72)&nbsp;F-&gt;(.E),*<br></span><span style="COLOR: #008080">&nbsp;84</span>&nbsp;<span style="COLOR: #000000">(73)&nbsp;F-&gt;(.E),/<br></span><span style="COLOR: #008080">&nbsp;85</span>&nbsp;<span style="COLOR: #000000">(74)&nbsp;F-&gt;i.,#<br></span><span style="COLOR: #008080">&nbsp;86</span>&nbsp;<span style="COLOR: #000000">(75)&nbsp;F-&gt;i.,+<br></span><span style="COLOR: #008080">&nbsp;87</span>&nbsp;<span style="COLOR: #000000">(76)&nbsp;F-&gt;i.,-<br></span><span style="COLOR: #008080">&nbsp;88</span>&nbsp;<span style="COLOR: #000000">(77)&nbsp;F-&gt;i.,*<br></span><span style="COLOR: #008080">&nbsp;89</span>&nbsp;<span style="COLOR: #000000">(78)&nbsp;F-&gt;i.,/<br></span><span style="COLOR: #008080">&nbsp;90</span>&nbsp;<span style="COLOR: #000000">(79)&nbsp;E-&gt;E+.T,#<br></span><span style="COLOR: #008080">&nbsp;91</span>&nbsp;<span style="COLOR: #000000">(80)&nbsp;E-&gt;E+.T,+<br></span><span style="COLOR: #008080">&nbsp;92</span>&nbsp;<span style="COLOR: #000000">(81)&nbsp;E-&gt;E+.T,-<br></span><span style="COLOR: #008080">&nbsp;93</span>&nbsp;<span style="COLOR: #000000">(82)&nbsp;E-&gt;E-.T,#<br></span><span style="COLOR: #008080">&nbsp;94</span>&nbsp;<span style="COLOR: #000000">(83)&nbsp;E-&gt;E-.T,+<br></span><span style="COLOR: #008080">&nbsp;95</span>&nbsp;<span style="COLOR: #000000">(84)&nbsp;E-&gt;E-.T,-<br></span><span style="COLOR: #008080">&nbsp;96</span>&nbsp;<span style="COLOR: #000000">(85)&nbsp;T-&gt;T*.F,#<br></span><span style="COLOR: #008080">&nbsp;97</span>&nbsp;<span style="COLOR: #000000">(86)&nbsp;T-&gt;T*.F,+<br></span><span style="COLOR: #008080">&nbsp;98</span>&nbsp;<span style="COLOR: #000000">(87)&nbsp;T-&gt;T*.F,-<br></span><span style="COLOR: #008080">&nbsp;99</span>&nbsp;<span style="COLOR: #000000">(88)&nbsp;T-&gt;T*.F,*<br></span><span style="COLOR: #008080">100</span>&nbsp;<span style="COLOR: #000000">(89)&nbsp;T-&gt;T*.F,/<br></span><span style="COLOR: #008080">101</span>&nbsp;<span style="COLOR: #000000">(90)&nbsp;T-&gt;T/.F,#<br></span><span style="COLOR: #008080">102</span>&nbsp;<span style="COLOR: #000000">(91)&nbsp;T-&gt;T/.F,+<br></span><span style="COLOR: #008080">103</span>&nbsp;<span style="COLOR: #000000">(92)&nbsp;T-&gt;T/.F,-<br></span><span style="COLOR: #008080">104</span>&nbsp;<span style="COLOR: #000000">(93)&nbsp;T-&gt;T/.F,*<br></span><span style="COLOR: #008080">105</span>&nbsp;<span style="COLOR: #000000">(94)&nbsp;T-&gt;T/.F,/<br></span><span style="COLOR: #008080">106</span>&nbsp;<span style="COLOR: #000000">(95)&nbsp;F-&gt;(E.),#<br></span><span style="COLOR: #008080">107</span>&nbsp;<span style="COLOR: #000000">(96)&nbsp;E-&gt;E.+T,)<br></span><span style="COLOR: #008080">108</span>&nbsp;<span style="COLOR: #000000">(97)&nbsp;E-&gt;E.-T,)<br></span><span style="COLOR: #008080">109</span>&nbsp;<span style="COLOR: #000000">(98)&nbsp;F-&gt;(E.),+<br></span><span style="COLOR: #008080">110</span>&nbsp;<span style="COLOR: #000000">(99)&nbsp;F-&gt;(E.),-<br></span><span style="COLOR: #008080">111</span>&nbsp;<span style="COLOR: #000000">(100)&nbsp;F-&gt;(E.),*<br></span><span style="COLOR: #008080">112</span>&nbsp;<span style="COLOR: #000000">(101)&nbsp;F-&gt;(E.),/<br></span><span style="COLOR: #008080">113</span>&nbsp;<span style="COLOR: #000000">(102)&nbsp;E-&gt;T.,)<br></span><span style="COLOR: #008080">114</span>&nbsp;<span style="COLOR: #000000">(103)&nbsp;T-&gt;T.*F,)<br></span><span style="COLOR: #008080">115</span>&nbsp;<span style="COLOR: #000000">(104)&nbsp;T-&gt;T./F,)<br></span><span style="COLOR: #008080">116</span>&nbsp;<span style="COLOR: #000000">(105)&nbsp;T-&gt;F.,)<br></span><span style="COLOR: #008080">117</span>&nbsp;<span style="COLOR: #000000">(106)&nbsp;F-&gt;(.E),)<br></span><span style="COLOR: #008080">118</span>&nbsp;<span style="COLOR: #000000">(107)&nbsp;F-&gt;i.,)<br></span><span style="COLOR: #008080">119</span>&nbsp;<span style="COLOR: #000000">(108)&nbsp;E-&gt;E+T.,#<br></span><span style="COLOR: #008080">120</span>&nbsp;<span style="COLOR: #000000">(109)&nbsp;E-&gt;E+T.,+<br></span><span style="COLOR: #008080">121</span>&nbsp;<span style="COLOR: #000000">(110)&nbsp;E-&gt;E+T.,-<br></span><span style="COLOR: #008080">122</span>&nbsp;<span style="COLOR: #000000">(111)&nbsp;E-&gt;E-T.,#<br></span><span style="COLOR: #008080">123</span>&nbsp;<span style="COLOR: #000000">(112)&nbsp;E-&gt;E-T.,+<br></span><span style="COLOR: #008080">124</span>&nbsp;<span style="COLOR: #000000">(113)&nbsp;E-&gt;E-T.,-<br></span><span style="COLOR: #008080">125</span>&nbsp;<span style="COLOR: #000000">(114)&nbsp;T-&gt;T*F.,#<br></span><span style="COLOR: #008080">126</span>&nbsp;<span style="COLOR: #000000">(115)&nbsp;T-&gt;T*F.,+<br></span><span style="COLOR: #008080">127</span>&nbsp;<span style="COLOR: #000000">(116)&nbsp;T-&gt;T*F.,-<br></span><span style="COLOR: #008080">128</span>&nbsp;<span style="COLOR: #000000">(117)&nbsp;T-&gt;T*F.,*<br></span><span style="COLOR: #008080">129</span>&nbsp;<span style="COLOR: #000000">(118)&nbsp;T-&gt;T*F.,/<br></span><span style="COLOR: #008080">130</span>&nbsp;<span style="COLOR: #000000">(119)&nbsp;T-&gt;T/F.,#<br></span><span style="COLOR: #008080">131</span>&nbsp;<span style="COLOR: #000000">(120)&nbsp;T-&gt;T/F.,+<br></span><span style="COLOR: #008080">132</span>&nbsp;<span style="COLOR: #000000">(121)&nbsp;T-&gt;T/F.,-<br></span><span style="COLOR: #008080">133</span>&nbsp;<span style="COLOR: #000000">(122)&nbsp;T-&gt;T/F.,*<br></span><span style="COLOR: #008080">134</span>&nbsp;<span style="COLOR: #000000">(123)&nbsp;T-&gt;T/F.,/<br></span><span style="COLOR: #008080">135</span>&nbsp;<span style="COLOR: #000000">(124)&nbsp;F-&gt;(E).,#<br></span><span style="COLOR: #008080">136</span>&nbsp;<span style="COLOR: #000000">(125)&nbsp;F-&gt;(E).,+<br></span><span style="COLOR: #008080">137</span>&nbsp;<span style="COLOR: #000000">(126)&nbsp;F-&gt;(E).,-<br></span><span style="COLOR: #008080">138</span>&nbsp;<span style="COLOR: #000000">(127)&nbsp;F-&gt;(E).,*<br></span><span style="COLOR: #008080">139</span>&nbsp;<span style="COLOR: #000000">(128)&nbsp;F-&gt;(E).,/<br></span><span style="COLOR: #008080">140</span>&nbsp;<span style="COLOR: #000000">(129)&nbsp;E-&gt;E+.T,)<br></span><span style="COLOR: #008080">141</span>&nbsp;<span style="COLOR: #000000">(130)&nbsp;E-&gt;E-.T,)<br></span><span style="COLOR: #008080">142</span>&nbsp;<span style="COLOR: #000000">(131)&nbsp;T-&gt;T*.F,)<br></span><span style="COLOR: #008080">143</span>&nbsp;<span style="COLOR: #000000">(132)&nbsp;T-&gt;T/.F,)<br></span><span style="COLOR: #008080">144</span>&nbsp;<span style="COLOR: #000000">(133)&nbsp;F-&gt;(E.),)<br></span><span style="COLOR: #008080">145</span>&nbsp;<span style="COLOR: #000000">(134)&nbsp;E-&gt;E+T.,)<br></span><span style="COLOR: #008080">146</span>&nbsp;<span style="COLOR: #000000">(135)&nbsp;E-&gt;E-T.,)<br></span><span style="COLOR: #008080">147</span>&nbsp;<span style="COLOR: #000000">(136)&nbsp;T-&gt;T*F.,)<br></span><span style="COLOR: #008080">148</span>&nbsp;<span style="COLOR: #000000">(137)&nbsp;T-&gt;T/F.,)<br></span><span style="COLOR: #008080">149</span>&nbsp;<span style="COLOR: #000000">(138)&nbsp;F-&gt;(E).,)<br></span><span style="COLOR: #008080">150</span>&nbsp;<span style="COLOR: #000000">项目规范族如下：<br></span><span style="COLOR: #008080">151</span>&nbsp;<span style="COLOR: #000000">I0&nbsp;{&nbsp;1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10,&nbsp;11,&nbsp;12,&nbsp;13,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;26,&nbsp;27,&nbsp;28,&nbsp;29,&nbsp;30,&nbsp;31,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35&nbsp;}<br></span><span style="COLOR: #008080">152</span>&nbsp;<span style="COLOR: #000000">I1&nbsp;{&nbsp;36,&nbsp;37,&nbsp;38,&nbsp;39,&nbsp;40,&nbsp;41,&nbsp;42&nbsp;}<br></span><span style="COLOR: #008080">153</span>&nbsp;<span style="COLOR: #000000">I2&nbsp;{&nbsp;43,&nbsp;44,&nbsp;45,&nbsp;46,&nbsp;47,&nbsp;48,&nbsp;49,&nbsp;50,&nbsp;51,&nbsp;52,&nbsp;53,&nbsp;54,&nbsp;55&nbsp;}<br></span><span style="COLOR: #008080">154</span>&nbsp;<span style="COLOR: #000000">I3&nbsp;{&nbsp;56,&nbsp;57,&nbsp;58,&nbsp;59,&nbsp;60&nbsp;}<br></span><span style="COLOR: #008080">155</span>&nbsp;<span style="COLOR: #000000">I4&nbsp;{&nbsp;61,&nbsp;62,&nbsp;63,&nbsp;64,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10,&nbsp;65,&nbsp;66,&nbsp;67,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;68,&nbsp;69,&nbsp;28,&nbsp;29,&nbsp;30,&nbsp;31,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;70,&nbsp;71,&nbsp;72,&nbsp;73&nbsp;}<br></span><span style="COLOR: #008080">156</span>&nbsp;<span style="COLOR: #000000">I5&nbsp;{&nbsp;74,&nbsp;75,&nbsp;76,&nbsp;77,&nbsp;78&nbsp;}<br></span><span style="COLOR: #008080">157</span>&nbsp;<span style="COLOR: #000000">I6&nbsp;{&nbsp;79,&nbsp;11,&nbsp;12,&nbsp;13,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;26,&nbsp;27,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;80,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;28,&nbsp;29,&nbsp;81,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;30,&nbsp;31&nbsp;}<br></span><span style="COLOR: #008080">158</span>&nbsp;<span style="COLOR: #000000">I7&nbsp;{&nbsp;82,&nbsp;11,&nbsp;12,&nbsp;13,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;26,&nbsp;27,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;83,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;28,&nbsp;29,&nbsp;84,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;30,&nbsp;31&nbsp;}<br></span><span style="COLOR: #008080">159</span>&nbsp;<span style="COLOR: #000000">I8&nbsp;{&nbsp;85,&nbsp;26,&nbsp;27,&nbsp;86,&nbsp;28,&nbsp;29,&nbsp;87,&nbsp;30,&nbsp;31,&nbsp;88,&nbsp;32,&nbsp;33,&nbsp;89,&nbsp;34,&nbsp;35&nbsp;}<br></span><span style="COLOR: #008080">160</span>&nbsp;<span style="COLOR: #000000">I9&nbsp;{&nbsp;90,&nbsp;26,&nbsp;27,&nbsp;91,&nbsp;28,&nbsp;29,&nbsp;92,&nbsp;30,&nbsp;31,&nbsp;93,&nbsp;32,&nbsp;33,&nbsp;94,&nbsp;34,&nbsp;35&nbsp;}<br></span><span style="COLOR: #008080">161</span>&nbsp;<span style="COLOR: #000000">I10&nbsp;{&nbsp;95,&nbsp;96,&nbsp;97,&nbsp;39,&nbsp;40,&nbsp;41,&nbsp;42,&nbsp;98,&nbsp;99,&nbsp;100,&nbsp;101&nbsp;}<br></span><span style="COLOR: #008080">162</span>&nbsp;<span style="COLOR: #000000">I11&nbsp;{&nbsp;102,&nbsp;44,&nbsp;45,&nbsp;103,&nbsp;104,&nbsp;48,&nbsp;49,&nbsp;50,&nbsp;51,&nbsp;52,&nbsp;53,&nbsp;54,&nbsp;55&nbsp;}<br></span><span style="COLOR: #008080">163</span>&nbsp;<span style="COLOR: #000000">I12&nbsp;{&nbsp;105,&nbsp;57,&nbsp;58,&nbsp;59,&nbsp;60&nbsp;}<br></span><span style="COLOR: #008080">164</span>&nbsp;<span style="COLOR: #000000">I13&nbsp;{&nbsp;106,&nbsp;62,&nbsp;63,&nbsp;64,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10,&nbsp;65,&nbsp;66,&nbsp;67,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;68,&nbsp;69,&nbsp;28,&nbsp;29,&nbsp;30,&nbsp;31,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;70,&nbsp;71,&nbsp;72,&nbsp;73&nbsp;}<br></span><span style="COLOR: #008080">165</span>&nbsp;<span style="COLOR: #000000">I14&nbsp;{&nbsp;107,&nbsp;75,&nbsp;76,&nbsp;77,&nbsp;78&nbsp;}<br></span><span style="COLOR: #008080">166</span>&nbsp;<span style="COLOR: #000000">I15&nbsp;{&nbsp;108,&nbsp;46,&nbsp;47,&nbsp;52,&nbsp;53,&nbsp;54,&nbsp;55,&nbsp;109,&nbsp;48,&nbsp;49,&nbsp;110,&nbsp;50,&nbsp;51&nbsp;}<br></span><span style="COLOR: #008080">167</span>&nbsp;<span style="COLOR: #000000">I16&nbsp;{&nbsp;56,&nbsp;59,&nbsp;60,&nbsp;57,&nbsp;58&nbsp;}<br></span><span style="COLOR: #008080">168</span>&nbsp;<span style="COLOR: #000000">I17&nbsp;{&nbsp;61,&nbsp;62,&nbsp;63,&nbsp;64,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10,&nbsp;65,&nbsp;66,&nbsp;67,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;68,&nbsp;69,&nbsp;28,&nbsp;29,&nbsp;30,&nbsp;31,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;72,&nbsp;73,&nbsp;70,&nbsp;71&nbsp;}<br></span><span style="COLOR: #008080">169</span>&nbsp;<span style="COLOR: #000000">I18&nbsp;{&nbsp;74,&nbsp;77,&nbsp;78,&nbsp;75,&nbsp;76&nbsp;}<br></span><span style="COLOR: #008080">170</span>&nbsp;<span style="COLOR: #000000">I19&nbsp;{&nbsp;111,&nbsp;46,&nbsp;47,&nbsp;52,&nbsp;53,&nbsp;54,&nbsp;55,&nbsp;112,&nbsp;48,&nbsp;49,&nbsp;113,&nbsp;50,&nbsp;51&nbsp;}<br></span><span style="COLOR: #008080">171</span>&nbsp;<span style="COLOR: #000000">I20&nbsp;{&nbsp;114,&nbsp;115,&nbsp;116,&nbsp;117,&nbsp;118&nbsp;}<br></span><span style="COLOR: #008080">172</span>&nbsp;<span style="COLOR: #000000">I21&nbsp;{&nbsp;119,&nbsp;120,&nbsp;121,&nbsp;122,&nbsp;123&nbsp;}<br></span><span style="COLOR: #008080">173</span>&nbsp;<span style="COLOR: #000000">I22&nbsp;{&nbsp;124,&nbsp;125,&nbsp;126,&nbsp;127,&nbsp;128&nbsp;}<br></span><span style="COLOR: #008080">174</span>&nbsp;<span style="COLOR: #000000">I23&nbsp;{&nbsp;129,&nbsp;65,&nbsp;66,&nbsp;67,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;68,&nbsp;69,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;80,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;28,&nbsp;29,&nbsp;81,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;30,&nbsp;31&nbsp;}<br></span><span style="COLOR: #008080">175</span>&nbsp;<span style="COLOR: #000000">I24&nbsp;{&nbsp;130,&nbsp;65,&nbsp;66,&nbsp;67,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;68,&nbsp;69,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;83,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;28,&nbsp;29,&nbsp;84,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;30,&nbsp;31&nbsp;}<br></span><span style="COLOR: #008080">176</span>&nbsp;<span style="COLOR: #000000">I25&nbsp;{&nbsp;131,&nbsp;68,&nbsp;69,&nbsp;86,&nbsp;28,&nbsp;29,&nbsp;87,&nbsp;30,&nbsp;31,&nbsp;88,&nbsp;32,&nbsp;33,&nbsp;89,&nbsp;34,&nbsp;35&nbsp;}<br></span><span style="COLOR: #008080">177</span>&nbsp;<span style="COLOR: #000000">I26&nbsp;{&nbsp;132,&nbsp;68,&nbsp;69,&nbsp;91,&nbsp;28,&nbsp;29,&nbsp;92,&nbsp;30,&nbsp;31,&nbsp;93,&nbsp;32,&nbsp;33,&nbsp;94,&nbsp;34,&nbsp;35&nbsp;}<br></span><span style="COLOR: #008080">178</span>&nbsp;<span style="COLOR: #000000">I27&nbsp;{&nbsp;133,&nbsp;96,&nbsp;97,&nbsp;39,&nbsp;40,&nbsp;41,&nbsp;42,&nbsp;98,&nbsp;99,&nbsp;100,&nbsp;101&nbsp;}<br></span><span style="COLOR: #008080">179</span>&nbsp;<span style="COLOR: #000000">I28&nbsp;{&nbsp;85,&nbsp;26,&nbsp;27,&nbsp;88,&nbsp;32,&nbsp;33,&nbsp;89,&nbsp;34,&nbsp;35,&nbsp;86,&nbsp;28,&nbsp;29,&nbsp;87,&nbsp;30,&nbsp;31&nbsp;}<br></span><span style="COLOR: #008080">180</span>&nbsp;<span style="COLOR: #000000">I29&nbsp;{&nbsp;90,&nbsp;26,&nbsp;27,&nbsp;93,&nbsp;32,&nbsp;33,&nbsp;94,&nbsp;34,&nbsp;35,&nbsp;91,&nbsp;28,&nbsp;29,&nbsp;92,&nbsp;30,&nbsp;31&nbsp;}<br></span><span style="COLOR: #008080">181</span>&nbsp;<span style="COLOR: #000000">I30&nbsp;{&nbsp;95,&nbsp;96,&nbsp;97,&nbsp;39,&nbsp;40,&nbsp;41,&nbsp;42,&nbsp;100,&nbsp;101,&nbsp;98,&nbsp;99&nbsp;}<br></span><span style="COLOR: #008080">182</span>&nbsp;<span style="COLOR: #000000">I31&nbsp;{&nbsp;134,&nbsp;103,&nbsp;104,&nbsp;52,&nbsp;53,&nbsp;54,&nbsp;55,&nbsp;109,&nbsp;48,&nbsp;49,&nbsp;110,&nbsp;50,&nbsp;51&nbsp;}<br></span><span style="COLOR: #008080">183</span>&nbsp;<span style="COLOR: #000000">I32&nbsp;{&nbsp;105,&nbsp;59,&nbsp;60,&nbsp;57,&nbsp;58&nbsp;}<br></span><span style="COLOR: #008080">184</span>&nbsp;<span style="COLOR: #000000">I33&nbsp;{&nbsp;106,&nbsp;62,&nbsp;63,&nbsp;64,&nbsp;5,&nbsp;6,&nbsp;7,&nbsp;8,&nbsp;9,&nbsp;10,&nbsp;65,&nbsp;66,&nbsp;67,&nbsp;14,&nbsp;15,&nbsp;16,&nbsp;17,&nbsp;18,&nbsp;19,&nbsp;20,&nbsp;21,&nbsp;22,&nbsp;23,&nbsp;24,&nbsp;25,&nbsp;68,&nbsp;69,&nbsp;28,&nbsp;29,&nbsp;30,&nbsp;31,&nbsp;32,&nbsp;33,&nbsp;34,&nbsp;35,&nbsp;72,&nbsp;73,&nbsp;70,&nbsp;71&nbsp;}<br></span><span style="COLOR: #008080">185</span>&nbsp;<span style="COLOR: #000000">I34&nbsp;{&nbsp;107,&nbsp;77,&nbsp;78,&nbsp;75,&nbsp;76&nbsp;}<br></span><span style="COLOR: #008080">186</span>&nbsp;<span style="COLOR: #000000">I35&nbsp;{&nbsp;135,&nbsp;103,&nbsp;104,&nbsp;52,&nbsp;53,&nbsp;54,&nbsp;55,&nbsp;112,&nbsp;48,&nbsp;49,&nbsp;113,&nbsp;50,&nbsp;51&nbsp;}<br></span><span style="COLOR: #008080">187</span>&nbsp;<span style="COLOR: #000000">I36&nbsp;{&nbsp;136,&nbsp;115,&nbsp;116,&nbsp;117,&nbsp;118&nbsp;}<br></span><span style="COLOR: #008080">188</span>&nbsp;<span style="COLOR: #000000">I37&nbsp;{&nbsp;137,&nbsp;120,&nbsp;121,&nbsp;122,&nbsp;123&nbsp;}<br></span><span style="COLOR: #008080">189</span>&nbsp;<span style="COLOR: #000000">I38&nbsp;{&nbsp;138,&nbsp;125,&nbsp;126,&nbsp;127,&nbsp;128&nbsp;}<br></span><span style="COLOR: #008080">190</span>&nbsp;<span style="COLOR: #000000">I39&nbsp;{&nbsp;114,&nbsp;117,&nbsp;118,&nbsp;115,&nbsp;116&nbsp;}<br></span><span style="COLOR: #008080">191</span>&nbsp;<span style="COLOR: #000000">I40&nbsp;{&nbsp;119,&nbsp;122,&nbsp;123,&nbsp;120,&nbsp;121&nbsp;}<br></span><span style="COLOR: #008080">192</span>&nbsp;<span style="COLOR: #000000">I41&nbsp;{&nbsp;124,&nbsp;127,&nbsp;128,&nbsp;125,&nbsp;126&nbsp;}<br></span><span style="COLOR: #008080">193</span>&nbsp;<span style="COLOR: #000000">I42&nbsp;{&nbsp;131,&nbsp;68,&nbsp;69,&nbsp;88,&nbsp;32,&nbsp;33,&nbsp;89,&nbsp;34,&nbsp;35,&nbsp;86,&nbsp;28,&nbsp;29,&nbsp;87,&nbsp;30,&nbsp;31&nbsp;}<br></span><span style="COLOR: #008080">194</span>&nbsp;<span style="COLOR: #000000">I43&nbsp;{&nbsp;132,&nbsp;68,&nbsp;69,&nbsp;93,&nbsp;32,&nbsp;33,&nbsp;94,&nbsp;34,&nbsp;35,&nbsp;91,&nbsp;28,&nbsp;29,&nbsp;92,&nbsp;30,&nbsp;31&nbsp;}<br></span><span style="COLOR: #008080">195</span>&nbsp;<span style="COLOR: #000000">I44&nbsp;{&nbsp;133,&nbsp;96,&nbsp;97,&nbsp;39,&nbsp;40,&nbsp;41,&nbsp;42,&nbsp;100,&nbsp;101,&nbsp;98,&nbsp;99&nbsp;}<br></span><span style="COLOR: #008080">196</span>&nbsp;<span style="COLOR: #000000">I45&nbsp;{&nbsp;136,&nbsp;117,&nbsp;118,&nbsp;115,&nbsp;116&nbsp;}<br></span><span style="COLOR: #008080">197</span>&nbsp;<span style="COLOR: #000000">I46&nbsp;{&nbsp;137,&nbsp;122,&nbsp;123,&nbsp;120,&nbsp;121&nbsp;}<br></span><span style="COLOR: #008080">198</span>&nbsp;<span style="COLOR: #000000">I47&nbsp;{&nbsp;138,&nbsp;127,&nbsp;128,&nbsp;125,&nbsp;126&nbsp;}<br></span><span style="COLOR: #008080">199</span>&nbsp;<span style="COLOR: #000000">状态转移表如下：<br></span><span style="COLOR: #008080">200</span>&nbsp;<span style="COLOR: #000000">I0&nbsp;-&gt;&nbsp;I1&nbsp;[&nbsp;E&nbsp;]<br></span><span style="COLOR: #008080">201</span>&nbsp;<span style="COLOR: #000000">I0&nbsp;-&gt;&nbsp;I2&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">202</span>&nbsp;<span style="COLOR: #000000">I0&nbsp;-&gt;&nbsp;I3&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">203</span>&nbsp;<span style="COLOR: #000000">I0&nbsp;-&gt;&nbsp;I4&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">204</span>&nbsp;<span style="COLOR: #000000">I0&nbsp;-&gt;&nbsp;I5&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">205</span>&nbsp;<span style="COLOR: #000000">I1&nbsp;-&gt;&nbsp;I6&nbsp;[&nbsp;+&nbsp;]<br></span><span style="COLOR: #008080">206</span>&nbsp;<span style="COLOR: #000000">I1&nbsp;-&gt;&nbsp;I7&nbsp;[&nbsp;-&nbsp;]<br></span><span style="COLOR: #008080">207</span>&nbsp;<span style="COLOR: #000000">I2&nbsp;-&gt;&nbsp;I8&nbsp;[&nbsp;*&nbsp;]<br></span><span style="COLOR: #008080">208</span>&nbsp;<span style="COLOR: #000000">I2&nbsp;-&gt;&nbsp;I9&nbsp;[&nbsp;/&nbsp;]<br></span><span style="COLOR: #008080">209</span>&nbsp;<span style="COLOR: #000000">I4&nbsp;-&gt;&nbsp;I10&nbsp;[&nbsp;E&nbsp;]<br></span><span style="COLOR: #008080">210</span>&nbsp;<span style="COLOR: #000000">I4&nbsp;-&gt;&nbsp;I11&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">211</span>&nbsp;<span style="COLOR: #000000">I4&nbsp;-&gt;&nbsp;I12&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">212</span>&nbsp;<span style="COLOR: #000000">I4&nbsp;-&gt;&nbsp;I13&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">213</span>&nbsp;<span style="COLOR: #000000">I4&nbsp;-&gt;&nbsp;I14&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">214</span>&nbsp;<span style="COLOR: #000000">I6&nbsp;-&gt;&nbsp;I15&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">215</span>&nbsp;<span style="COLOR: #000000">I6&nbsp;-&gt;&nbsp;I16&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">216</span>&nbsp;<span style="COLOR: #000000">I6&nbsp;-&gt;&nbsp;I17&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">217</span>&nbsp;<span style="COLOR: #000000">I6&nbsp;-&gt;&nbsp;I18&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">218</span>&nbsp;<span style="COLOR: #000000">I7&nbsp;-&gt;&nbsp;I19&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">219</span>&nbsp;<span style="COLOR: #000000">I7&nbsp;-&gt;&nbsp;I16&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">220</span>&nbsp;<span style="COLOR: #000000">I7&nbsp;-&gt;&nbsp;I17&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">221</span>&nbsp;<span style="COLOR: #000000">I7&nbsp;-&gt;&nbsp;I18&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">222</span>&nbsp;<span style="COLOR: #000000">I8&nbsp;-&gt;&nbsp;I20&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">223</span>&nbsp;<span style="COLOR: #000000">I8&nbsp;-&gt;&nbsp;I4&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">224</span>&nbsp;<span style="COLOR: #000000">I8&nbsp;-&gt;&nbsp;I5&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">225</span>&nbsp;<span style="COLOR: #000000">I9&nbsp;-&gt;&nbsp;I21&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">226</span>&nbsp;<span style="COLOR: #000000">I9&nbsp;-&gt;&nbsp;I4&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">227</span>&nbsp;<span style="COLOR: #000000">I9&nbsp;-&gt;&nbsp;I5&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">228</span>&nbsp;<span style="COLOR: #000000">I10&nbsp;-&gt;&nbsp;I22&nbsp;[&nbsp;)&nbsp;]<br></span><span style="COLOR: #008080">229</span>&nbsp;<span style="COLOR: #000000">I10&nbsp;-&gt;&nbsp;I23&nbsp;[&nbsp;+&nbsp;]<br></span><span style="COLOR: #008080">230</span>&nbsp;<span style="COLOR: #000000">I10&nbsp;-&gt;&nbsp;I24&nbsp;[&nbsp;-&nbsp;]<br></span><span style="COLOR: #008080">231</span>&nbsp;<span style="COLOR: #000000">I11&nbsp;-&gt;&nbsp;I25&nbsp;[&nbsp;*&nbsp;]<br></span><span style="COLOR: #008080">232</span>&nbsp;<span style="COLOR: #000000">I11&nbsp;-&gt;&nbsp;I26&nbsp;[&nbsp;/&nbsp;]<br></span><span style="COLOR: #008080">233</span>&nbsp;<span style="COLOR: #000000">I13&nbsp;-&gt;&nbsp;I27&nbsp;[&nbsp;E&nbsp;]<br></span><span style="COLOR: #008080">234</span>&nbsp;<span style="COLOR: #000000">I13&nbsp;-&gt;&nbsp;I11&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">235</span>&nbsp;<span style="COLOR: #000000">I13&nbsp;-&gt;&nbsp;I12&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">236</span>&nbsp;<span style="COLOR: #000000">I13&nbsp;-&gt;&nbsp;I13&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">237</span>&nbsp;<span style="COLOR: #000000">I13&nbsp;-&gt;&nbsp;I14&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">238</span>&nbsp;<span style="COLOR: #000000">I15&nbsp;-&gt;&nbsp;I28&nbsp;[&nbsp;*&nbsp;]<br></span><span style="COLOR: #008080">239</span>&nbsp;<span style="COLOR: #000000">I15&nbsp;-&gt;&nbsp;I29&nbsp;[&nbsp;/&nbsp;]<br></span><span style="COLOR: #008080">240</span>&nbsp;<span style="COLOR: #000000">I17&nbsp;-&gt;&nbsp;I30&nbsp;[&nbsp;E&nbsp;]<br></span><span style="COLOR: #008080">241</span>&nbsp;<span style="COLOR: #000000">I17&nbsp;-&gt;&nbsp;I11&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">242</span>&nbsp;<span style="COLOR: #000000">I17&nbsp;-&gt;&nbsp;I12&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">243</span>&nbsp;<span style="COLOR: #000000">I17&nbsp;-&gt;&nbsp;I13&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">244</span>&nbsp;<span style="COLOR: #000000">I17&nbsp;-&gt;&nbsp;I14&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">245</span>&nbsp;<span style="COLOR: #000000">I19&nbsp;-&gt;&nbsp;I28&nbsp;[&nbsp;*&nbsp;]<br></span><span style="COLOR: #008080">246</span>&nbsp;<span style="COLOR: #000000">I19&nbsp;-&gt;&nbsp;I29&nbsp;[&nbsp;/&nbsp;]<br></span><span style="COLOR: #008080">247</span>&nbsp;<span style="COLOR: #000000">I23&nbsp;-&gt;&nbsp;I31&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">248</span>&nbsp;<span style="COLOR: #000000">I23&nbsp;-&gt;&nbsp;I32&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">249</span>&nbsp;<span style="COLOR: #000000">I23&nbsp;-&gt;&nbsp;I33&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">250</span>&nbsp;<span style="COLOR: #000000">I23&nbsp;-&gt;&nbsp;I34&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">251</span>&nbsp;<span style="COLOR: #000000">I24&nbsp;-&gt;&nbsp;I35&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">252</span>&nbsp;<span style="COLOR: #000000">I24&nbsp;-&gt;&nbsp;I32&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">253</span>&nbsp;<span style="COLOR: #000000">I24&nbsp;-&gt;&nbsp;I33&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">254</span>&nbsp;<span style="COLOR: #000000">I24&nbsp;-&gt;&nbsp;I34&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">255</span>&nbsp;<span style="COLOR: #000000">I25&nbsp;-&gt;&nbsp;I36&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">256</span>&nbsp;<span style="COLOR: #000000">I25&nbsp;-&gt;&nbsp;I13&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">257</span>&nbsp;<span style="COLOR: #000000">I25&nbsp;-&gt;&nbsp;I14&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">258</span>&nbsp;<span style="COLOR: #000000">I26&nbsp;-&gt;&nbsp;I37&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">259</span>&nbsp;<span style="COLOR: #000000">I26&nbsp;-&gt;&nbsp;I13&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">260</span>&nbsp;<span style="COLOR: #000000">I26&nbsp;-&gt;&nbsp;I14&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">261</span>&nbsp;<span style="COLOR: #000000">I27&nbsp;-&gt;&nbsp;I38&nbsp;[&nbsp;)&nbsp;]<br></span><span style="COLOR: #008080">262</span>&nbsp;<span style="COLOR: #000000">I27&nbsp;-&gt;&nbsp;I23&nbsp;[&nbsp;+&nbsp;]<br></span><span style="COLOR: #008080">263</span>&nbsp;<span style="COLOR: #000000">I27&nbsp;-&gt;&nbsp;I24&nbsp;[&nbsp;-&nbsp;]<br></span><span style="COLOR: #008080">264</span>&nbsp;<span style="COLOR: #000000">I28&nbsp;-&gt;&nbsp;I39&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">265</span>&nbsp;<span style="COLOR: #000000">I28&nbsp;-&gt;&nbsp;I17&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">266</span>&nbsp;<span style="COLOR: #000000">I28&nbsp;-&gt;&nbsp;I18&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">267</span>&nbsp;<span style="COLOR: #000000">I29&nbsp;-&gt;&nbsp;I40&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">268</span>&nbsp;<span style="COLOR: #000000">I29&nbsp;-&gt;&nbsp;I17&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">269</span>&nbsp;<span style="COLOR: #000000">I29&nbsp;-&gt;&nbsp;I18&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">270</span>&nbsp;<span style="COLOR: #000000">I30&nbsp;-&gt;&nbsp;I41&nbsp;[&nbsp;)&nbsp;]<br></span><span style="COLOR: #008080">271</span>&nbsp;<span style="COLOR: #000000">I30&nbsp;-&gt;&nbsp;I23&nbsp;[&nbsp;+&nbsp;]<br></span><span style="COLOR: #008080">272</span>&nbsp;<span style="COLOR: #000000">I30&nbsp;-&gt;&nbsp;I24&nbsp;[&nbsp;-&nbsp;]<br></span><span style="COLOR: #008080">273</span>&nbsp;<span style="COLOR: #000000">I31&nbsp;-&gt;&nbsp;I42&nbsp;[&nbsp;*&nbsp;]<br></span><span style="COLOR: #008080">274</span>&nbsp;<span style="COLOR: #000000">I31&nbsp;-&gt;&nbsp;I43&nbsp;[&nbsp;/&nbsp;]<br></span><span style="COLOR: #008080">275</span>&nbsp;<span style="COLOR: #000000">I33&nbsp;-&gt;&nbsp;I44&nbsp;[&nbsp;E&nbsp;]<br></span><span style="COLOR: #008080">276</span>&nbsp;<span style="COLOR: #000000">I33&nbsp;-&gt;&nbsp;I11&nbsp;[&nbsp;T&nbsp;]<br></span><span style="COLOR: #008080">277</span>&nbsp;<span style="COLOR: #000000">I33&nbsp;-&gt;&nbsp;I12&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">278</span>&nbsp;<span style="COLOR: #000000">I33&nbsp;-&gt;&nbsp;I13&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">279</span>&nbsp;<span style="COLOR: #000000">I33&nbsp;-&gt;&nbsp;I14&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">280</span>&nbsp;<span style="COLOR: #000000">I35&nbsp;-&gt;&nbsp;I42&nbsp;[&nbsp;*&nbsp;]<br></span><span style="COLOR: #008080">281</span>&nbsp;<span style="COLOR: #000000">I35&nbsp;-&gt;&nbsp;I43&nbsp;[&nbsp;/&nbsp;]<br></span><span style="COLOR: #008080">282</span>&nbsp;<span style="COLOR: #000000">I42&nbsp;-&gt;&nbsp;I45&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">283</span>&nbsp;<span style="COLOR: #000000">I42&nbsp;-&gt;&nbsp;I33&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">284</span>&nbsp;<span style="COLOR: #000000">I42&nbsp;-&gt;&nbsp;I34&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">285</span>&nbsp;<span style="COLOR: #000000">I43&nbsp;-&gt;&nbsp;I46&nbsp;[&nbsp;F&nbsp;]<br></span><span style="COLOR: #008080">286</span>&nbsp;<span style="COLOR: #000000">I43&nbsp;-&gt;&nbsp;I33&nbsp;[&nbsp;(&nbsp;]<br></span><span style="COLOR: #008080">287</span>&nbsp;<span style="COLOR: #000000">I43&nbsp;-&gt;&nbsp;I34&nbsp;[&nbsp;i&nbsp;]<br></span><span style="COLOR: #008080">288</span>&nbsp;<span style="COLOR: #000000">I44&nbsp;-&gt;&nbsp;I47&nbsp;[&nbsp;)&nbsp;]<br></span><span style="COLOR: #008080">289</span>&nbsp;<span style="COLOR: #000000">I44&nbsp;-&gt;&nbsp;I23&nbsp;[&nbsp;+&nbsp;]<br></span><span style="COLOR: #008080">290</span>&nbsp;<span style="COLOR: #000000">I44&nbsp;-&gt;&nbsp;I24&nbsp;[&nbsp;-&nbsp;]</span></div>
<br>由此可见LR(1)分析表会变得无比的巨大.
<img src ="http://www.cppblog.com/lwch/aggbug/120553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-16 16:03 <a href="http://www.cppblog.com/lwch/archive/2010/07/16/120553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现SLR(1)分析表的自动创建</title><link>http://www.cppblog.com/lwch/archive/2010/07/13/120174.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Mon, 12 Jul 2010 16:00:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/13/120174.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/120174.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/13/120174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/120174.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/120174.html</trackback:ping><description><![CDATA[对于给定二义性文法:<br>E-&gt;E+T<br>E-&gt;E-T<br>E-&gt;T<br>T-&gt;T*F<br>T-&gt;T/F<br>T-&gt;F<br>F-&gt;(E)<br>F-&gt;i<br>求得SLR(1)分析表为:<br><img height=534 alt="" src="http://www.cppblog.com/images/cppblog_com/lwch/SLR1ParserTable2.PNG" width=768 border=0>
<img src ="http://www.cppblog.com/lwch/aggbug/120174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-13 00:00 <a href="http://www.cppblog.com/lwch/archive/2010/07/13/120174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于字符串操作的注意事项</title><link>http://www.cppblog.com/lwch/archive/2010/07/11/120092.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sun, 11 Jul 2010 10:38:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/11/120092.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/120092.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/11/120092.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/120092.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/120092.html</trackback:ping><description><![CDATA[首先我们探讨几个问题:<br>CString str = L"";<br>str += 'a' + L"a";<br>或str += L"a" + 'a';<br>分别会得到什么?<br>答案是一堆一样的乱码.<br>这是为什么呢?<br>由于运算符的优先级的关系先计算'a' + L"a"或L"a" + 'a'当字符串与单个字符相加时编译器认为是将指针向后移动'a'(0x61)个字节,最后进入CString的+=运算符重载函数,由于传入的是一个字符串指针所以函数会将从L"a"+0x61的位置开始到\0结尾的所有字符连接到原字符后.应此也就出现了乱码的情况.<br>解决方法:<br>CString str = L"";<br>str += CString('a') + L"a";<br>或str += CString(L"a") + 'a';<br>在做加法运算时都会进入CString的+运算符的重载函数以得到正确的结果.
<img src ="http://www.cppblog.com/lwch/aggbug/120092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-11 18:38 <a href="http://www.cppblog.com/lwch/archive/2010/07/11/120092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现LR(0)分析表的自动构造</title><link>http://www.cppblog.com/lwch/archive/2010/07/11/120088.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sun, 11 Jul 2010 09:05:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/11/120088.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/120088.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/11/120088.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/120088.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/120088.html</trackback:ping><description><![CDATA[对于给定文法:<br>S-&gt;aAcBe<br>A-&gt;b<br>A-&gt;Ab<br>B-&gt;d<br>生成分析表得:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">LR(0)分析表为：<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;B<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">0&nbsp;&nbsp;&nbsp;&nbsp;S2&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">1&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;acc&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">2&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;S4&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&#949;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">3&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;S5&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;S6&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">4&nbsp;&nbsp;&nbsp;&nbsp;R2&nbsp;&nbsp;&nbsp;&nbsp;R2&nbsp;&nbsp;&nbsp;&nbsp;R2&nbsp;&nbsp;&nbsp;&nbsp;R2&nbsp;&nbsp;&nbsp;&nbsp;R2&nbsp;&nbsp;&nbsp;&nbsp;R2&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">5&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;S8&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;7<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">6&nbsp;&nbsp;&nbsp;&nbsp;R3&nbsp;&nbsp;&nbsp;&nbsp;R3&nbsp;&nbsp;&nbsp;&nbsp;R3&nbsp;&nbsp;&nbsp;&nbsp;R3&nbsp;&nbsp;&nbsp;&nbsp;R3&nbsp;&nbsp;&nbsp;&nbsp;R3&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">7&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;S9&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">8&nbsp;&nbsp;&nbsp;&nbsp;R4&nbsp;&nbsp;&nbsp;&nbsp;R4&nbsp;&nbsp;&nbsp;&nbsp;R4&nbsp;&nbsp;&nbsp;&nbsp;R4&nbsp;&nbsp;&nbsp;&nbsp;R4&nbsp;&nbsp;&nbsp;&nbsp;R4&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">9&nbsp;&nbsp;&nbsp;&nbsp;R1&nbsp;&nbsp;&nbsp;&nbsp;R1&nbsp;&nbsp;&nbsp;&nbsp;R1&nbsp;&nbsp;&nbsp;&nbsp;R1&nbsp;&nbsp;&nbsp;&nbsp;R1&nbsp;&nbsp;&nbsp;&nbsp;R1&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;&nbsp;&nbsp;&nbsp;&nbsp;&#949;</span></div>
<img src ="http://www.cppblog.com/lwch/aggbug/120088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-11 17:05 <a href="http://www.cppblog.com/lwch/archive/2010/07/11/120088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现从文法树到ε-Parser的转换</title><link>http://www.cppblog.com/lwch/archive/2010/07/09/119888.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Fri, 09 Jul 2010 09:45:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/09/119888.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/119888.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/09/119888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/119888.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/119888.html</trackback:ping><description><![CDATA[对于给定文法:<br>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp-&gt;exp1</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp1-&gt;exp2 | exp5</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp5-&gt;exp1 (<span style="COLOR: green">&#8220;&lt;&#8221;</span> | <span style="COLOR: green">&#8220;&gt;&#8221;</span> | <span style="COLOR: green">&#8220;==&#8221;</span>) exp2</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp2-&gt;exp3 | exp6</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp6-&gt;exp2 (<span style="COLOR: green">&#8220;+&#8221;</span> | <span style="COLOR: green">&#8220;-&#8220;</span>) exp3</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp3-&gt;exp4 | exp7</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp7-&gt;exp3(<span style="COLOR: green">&#8220;*&#8221;</span> | <span style="COLOR: green">&#8220;/&#8221;</span>) exp4</span></p>
<span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">exp4-&gt;<span style="COLOR: green">&#8221;(&#8220;</span> exp <span style="COLOR: green">&#8220;)&#8221;<br><br></span></span>生成&#949;-Parser得:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">&nbsp;1&nbsp;&#949;-&nbsp;Parser:<br>&nbsp;2&nbsp;Start:28<br>&nbsp;3&nbsp;X:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;From&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;To<br>&nbsp;4&nbsp;(:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1(finial)<br>&nbsp;5&nbsp;):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3(finial)<br>&nbsp;6&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>&nbsp;7&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br>&nbsp;8&nbsp;*:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5(finial)<br>&nbsp;9&nbsp;/:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7(finial)<br>10&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br>11&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9(finial)<br>12&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br>13&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9(finial)<br>14&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br>15&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br>16&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>17&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11(finial)<br>18&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>19&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11(finial)<br>20&nbsp;+:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13(finial)<br>21&nbsp;-:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15(finial)<br>22&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12<br>23&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17(finial)<br>24&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14<br>25&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17(finial)<br>26&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16<br>27&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16<br>28&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10<br>29&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19(finial)<br>30&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10<br>31&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19(finial)<br>32&nbsp;<span>&lt;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21(finial)</span><br>33&nbsp;<span>&gt;:&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23(finial)<br>34&nbsp;==:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25(finial)<br>35&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20<br>36&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27(finial)<br>37&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22<br>38&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27(finial)<br>39&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24<br>40&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27(finial)<br>41&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26<br>42&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26<br>43&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18<br>44&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;29(finial)<br>45&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18<br>46&nbsp;&#949;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;29(finial)</div>
<br>缺点:必须手动生成文法树 <br>下一步是去除&#949;边 
<img src ="http://www.cppblog.com/lwch/aggbug/119888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-09 17:45 <a href="http://www.cppblog.com/lwch/archive/2010/07/09/119888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用正则表达式构造词法分析器</title><link>http://www.cppblog.com/lwch/archive/2010/07/03/119258.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 03 Jul 2010 10:14:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/03/119258.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/119258.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/03/119258.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/119258.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/119258.html</trackback:ping><description><![CDATA[<a title=《用正则表达式构造词法分析器》 href="http://www.cppblog.com/Files/lwch/正则表达式构造词法分析器.rar">《用正则表达式构造词法分析器》</a><br>这篇文章阐述了如何用正则表达式构造语法树并生成&#949;-NFA，去除&#949;边转换到NFA，最后转换到DFA的所有过程。学习编译原理的朋友们如果遇到什么问题不妨看下这篇文章。 <br><a title=源码下载 href="http://www.cppblog.com/Files/lwch/Lexer.rar">源码下载</a>
<img src ="http://www.cppblog.com/lwch/aggbug/119258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-03 18:14 <a href="http://www.cppblog.com/lwch/archive/2010/07/03/119258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已实现简单正则表达式-&gt;ε-NFA-&gt;NFA-&gt;DFA的转换</title><link>http://www.cppblog.com/lwch/archive/2010/07/03/119205.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Fri, 02 Jul 2010 16:21:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/07/03/119205.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/119205.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/07/03/119205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/119205.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/119205.html</trackback:ping><description><![CDATA[<p>稍后制作相关文档..<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Regex&nbsp;Expression:(ab|a[a-z0-9]+|cd)*<br></span><span style="COLOR: #008080">&nbsp;&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>CharClassList:<br></span><span style="COLOR: #008080">&nbsp;&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br></span><span style="COLOR: #008080">&nbsp;&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br></span><span style="COLOR: #008080">&nbsp;&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<br></span><span style="COLOR: #008080">&nbsp;&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br></span><span style="COLOR: #008080">&nbsp;&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>a&nbsp;-&nbsp;z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>0&nbsp;-&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br></span><span style="COLOR: #008080">&nbsp;10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7<br></span><span style="COLOR: #008080">&nbsp;11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br></span><span style="COLOR: #008080">&nbsp;12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;-NFA:<br></span><span style="COLOR: #008080">&nbsp;14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Start:26&nbsp;End:26<br></span><span style="COLOR: #008080">&nbsp;15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>X:From&nbsp;&nbsp;&nbsp;&nbsp;To<br></span><span style="COLOR: #008080">&nbsp;16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>3:2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<br></span><span style="COLOR: #008080">&nbsp;18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br></span><span style="COLOR: #008080">&nbsp;19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7<br></span><span style="COLOR: #008080">&nbsp;21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9<br></span><span style="COLOR: #008080">&nbsp;22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br></span><span style="COLOR: #008080">&nbsp;23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8<br></span><span style="COLOR: #008080">&nbsp;24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11<br></span><span style="COLOR: #008080">&nbsp;25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11<br></span><span style="COLOR: #008080">&nbsp;26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13<br></span><span style="COLOR: #008080">&nbsp;27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15<br></span><span style="COLOR: #008080">&nbsp;28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12<br></span><span style="COLOR: #008080">&nbsp;29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14<br></span><span style="COLOR: #008080">&nbsp;30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17<br></span><span style="COLOR: #008080">&nbsp;31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17<br></span><span style="COLOR: #008080">&nbsp;32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10<br></span><span style="COLOR: #008080">&nbsp;33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17<br></span><span style="COLOR: #008080">&nbsp;34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16<br></span><span style="COLOR: #008080">&nbsp;35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br></span><span style="COLOR: #008080">&nbsp;36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br></span><span style="COLOR: #008080">&nbsp;37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19<br></span><span style="COLOR: #008080">&nbsp;38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19<br></span><span style="COLOR: #008080">&nbsp;39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21<br></span><span style="COLOR: #008080">&nbsp;40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>8:22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23<br></span><span style="COLOR: #008080">&nbsp;41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22<br></span><span style="COLOR: #008080">&nbsp;42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18<br></span><span style="COLOR: #008080">&nbsp;43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20<br></span><span style="COLOR: #008080">&nbsp;44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25<br></span><span style="COLOR: #008080">&nbsp;45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25<br></span><span style="COLOR: #008080">&nbsp;46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24<br></span><span style="COLOR: #008080">&nbsp;47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#949;:25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26<br></span><span style="COLOR: #008080">&nbsp;48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>NFA:<br></span><span style="COLOR: #008080">&nbsp;50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Start:26<br></span><span style="COLOR: #008080">&nbsp;51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>X:From&nbsp;&nbsp;&nbsp;&nbsp;To<br></span><span style="COLOR: #008080">&nbsp;52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:26(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21<br></span><span style="COLOR: #008080">&nbsp;53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:26(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:26(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>3:1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3(finial)<br></span><span style="COLOR: #008080">&nbsp;56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:3(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21<br></span><span style="COLOR: #008080">&nbsp;57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:3(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:3(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13(finial)<br></span><span style="COLOR: #008080">&nbsp;60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15(finial)<br></span><span style="COLOR: #008080">&nbsp;61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:7(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7(finial)<br></span><span style="COLOR: #008080">&nbsp;62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:7(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9(finial)<br></span><span style="COLOR: #008080">&nbsp;63</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:7(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21<br></span><span style="COLOR: #008080">&nbsp;64</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:7(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;65</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:7(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:9(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7(finial)<br></span><span style="COLOR: #008080">&nbsp;67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:9(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9(finial)<br></span><span style="COLOR: #008080">&nbsp;68</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:9(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21<br></span><span style="COLOR: #008080">&nbsp;69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:9(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:9(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;71</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:13(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7(finial)<br></span><span style="COLOR: #008080">&nbsp;72</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:13(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9(finial)<br></span><span style="COLOR: #008080">&nbsp;73</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:13(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21<br></span><span style="COLOR: #008080">&nbsp;74</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:13(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;75</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:13(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;76</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:15(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7(finial)<br></span><span style="COLOR: #008080">&nbsp;77</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:15(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9(finial)<br></span><span style="COLOR: #008080">&nbsp;78</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:15(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21<br></span><span style="COLOR: #008080">&nbsp;79</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:15(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;80</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:15(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;81</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>8:21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23(finial)<br></span><span style="COLOR: #008080">&nbsp;82</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:23(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21<br></span><span style="COLOR: #008080">&nbsp;83</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:23(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br></span><span style="COLOR: #008080">&nbsp;84</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:23(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br></span><span style="COLOR: #008080">&nbsp;85</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;86</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>DFA:<br></span><span style="COLOR: #008080">&nbsp;87</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Start:26<br></span><span style="COLOR: #008080">&nbsp;88</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>X:Froms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tos<br></span><span style="COLOR: #008080">&nbsp;89</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:26&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;<br></span><span style="COLOR: #008080">&nbsp;90</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:26&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;5&nbsp;<br></span><span style="COLOR: #008080">&nbsp;91</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>8:21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;(finial)<br></span><span style="COLOR: #008080">&nbsp;92</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>3:1&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;(finial)<br></span><span style="COLOR: #008080">&nbsp;93</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:1&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13&nbsp;(finial)<br></span><span style="COLOR: #008080">&nbsp;94</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:1&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15&nbsp;(finial)<br></span><span style="COLOR: #008080">&nbsp;95</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:23&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;<br></span><span style="COLOR: #008080">&nbsp;96</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:23&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;5&nbsp;<br></span><span style="COLOR: #008080">&nbsp;97</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:3&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;<br></span><span style="COLOR: #008080">&nbsp;98</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:3&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;5&nbsp;<br></span><span style="COLOR: #008080">&nbsp;99</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:13&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;(finial)<br></span><span style="COLOR: #008080">100</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:13&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;(finial)<br></span><span style="COLOR: #008080">101</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:13&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;<br></span><span style="COLOR: #008080">102</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:13&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;5&nbsp;<br></span><span style="COLOR: #008080">103</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:15&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;(finial)<br></span><span style="COLOR: #008080">104</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:15&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;(finial)<br></span><span style="COLOR: #008080">105</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:15&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;<br></span><span style="COLOR: #008080">106</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:15&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;5&nbsp;<br></span><span style="COLOR: #008080">107</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:7&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;(finial)<br></span><span style="COLOR: #008080">108</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:7&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;(finial)<br></span><span style="COLOR: #008080">109</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:7&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;<br></span><span style="COLOR: #008080">110</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:7&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;5&nbsp;<br></span><span style="COLOR: #008080">111</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>5:9&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;(finial)<br></span><span style="COLOR: #008080">112</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>6:9&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;(finial)<br></span><span style="COLOR: #008080">113</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>7:9&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21&nbsp;<br></span><span style="COLOR: #008080">114</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>2:9&nbsp;(finial)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;5&nbsp;</span></div>
<img src ="http://www.cppblog.com/lwch/aggbug/119205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-07-03 00:21 <a href="http://www.cppblog.com/lwch/archive/2010/07/03/119205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NScript词法分析器,语法分析器,代码生成器已制作完成</title><link>http://www.cppblog.com/lwch/archive/2010/06/26/118760.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 26 Jun 2010 02:57:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/06/26/118760.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/118760.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/06/26/118760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/118760.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/118760.html</trackback:ping><description><![CDATA[由于未进行类型检查直接生成的虚拟机代码所以可以在代码中直接使用变量.<br>Do语句:<br><img src="http://www.cppblog.com/images/cppblog_com/lwch/Do.PNG" border=0><br>For语句:<br><img src="http://www.cppblog.com/images/cppblog_com/lwch/For.PNG" border=0><br>Function:<br><img src="http://www.cppblog.com/images/cppblog_com/lwch/Function.PNG" border=0><br>If语句:<br><img src="http://www.cppblog.com/images/cppblog_com/lwch/If.PNG" border=0><br>Local语句:<br><img src="http://www.cppblog.com/images/cppblog_com/lwch/Local.PNG" border=0><br>Switch语句:<br><img src="http://www.cppblog.com/images/cppblog_com/lwch/Switch.PNG" border=0><br>While语句:<br><img src="http://www.cppblog.com/images/cppblog_com/lwch/While.PNG" border=0><br>阶乘:<br><img src="http://www.cppblog.com/images/cppblog_com/lwch/factorial1.PNG" border=0><br><img src="http://www.cppblog.com/images/cppblog_com/lwch/factorial2.PNG" border=0>
<img src ="http://www.cppblog.com/lwch/aggbug/118760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-06-26 10:57 <a href="http://www.cppblog.com/lwch/archive/2010/06/26/118760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NScript部分文法</title><link>http://www.cppblog.com/lwch/archive/2010/06/26/118755.html</link><dc:creator>lwch</dc:creator><author>lwch</author><pubDate>Sat, 26 Jun 2010 02:37:00 GMT</pubDate><guid>http://www.cppblog.com/lwch/archive/2010/06/26/118755.html</guid><wfw:comment>http://www.cppblog.com/lwch/comments/118755.html</wfw:comment><comments>http://www.cppblog.com/lwch/archive/2010/06/26/118755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lwch/comments/commentRss/118755.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lwch/services/trackbacks/118755.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>sym-&gt;<span style="COLOR: blue">[</span>a-z|A-Z|_<span style="COLOR: blue">][</span>a-z|A-Z|0-9|_<span style="COLOR: blue">]</span>*</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>int-&gt;<span style="COLOR: blue">[</span>0-9<span style="COLOR: blue">]</span>+</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>real-&gt;<span style="COLOR: blue">[</span>0-9<span style="COLOR: blue">]</span>+.<span style="COLOR: blue">[</span>0-9<span style="COLOR: blue">]</span>+</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>string-&gt;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>datatype-&gt;<span style="COLOR: green">&#8221;int&#8221;</span> | <span style="COLOR: green">&#8220;real&#8221;</span> | <span style="COLOR: green">&#8220;bool&#8221;</span> |<span style="COLOR: green"> &#8220;string&#8221;</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>prgama-&gt;function | functionheader <span style="COLOR: green">&#8220;;&#8221;</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>functionheader-&gt;<span style="COLOR: green">&#8221;function&#8221;</span> sym <span style="COLOR: green">&#8221;(&#8220;</span> parameters <span style="COLOR: green">&#8221;)&#8221;</span> <span style="mso-spacerun: yes">&nbsp;</span><span style="COLOR: blue">[</span><span style="COLOR: green">&#8220;as&#8221;</span> datatype<span style="COLOR: blue">]</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>parameters-&gt;<span style="COLOR: blue">[[</span>sym as datatype<span style="COLOR: blue">]</span>,parameters<span style="COLOR: blue">]</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>function-&gt;functionheader<span style="COLOR: green"> &#8220;{&#8220; </span>block <span style="COLOR: green">&#8220;}&#8221;</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>block-&gt;statementlist</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>statement-&gt;local-stmt | if-stmt | while-stmt | do-stmt | for-stmt | switch-stmt | assign-stmt | call-stmt | return-stmt</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>local-stmt-&gt;<span style="COLOR: green">&#8221;local&#8221;</span> varlist</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>varlist-&gt;symlist <span style="COLOR: green">&#8220;as&#8221;</span> datatype <span style="COLOR: blue">[</span><span style="COLOR: green">&#8220;,&#8221; </span>varlist<span style="COLOR: blue">]</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>if-stmt-&gt;<span style="COLOR: green">&#8221;if&#8221;</span> exp statementlist <span style="COLOR: blue">[</span><span style="COLOR: green">&#8220;else&#8221;</span> statementlist<span style="COLOR: blue">]</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>while-stmt-&gt;<span style="COLOR: green">&#8221;while&#8221;</span> exp statementlist</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>do-stmt-&gt;<span style="COLOR: green">&#8221;do&#8221;</span> statementlist <span style="COLOR: green">&#8220;while&#8221; </span>exp<span style="COLOR: green"> &#8220;;&#8221;</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>for-stmt-&gt;<span style="COLOR: green">&#8221;for&#8221;</span> <span style="COLOR: green">&#8220;(&#8220;</span> exp <span style="COLOR: green">&#8220;;&#8221; </span>exp<span style="COLOR: green"> &#8220;;&#8221; </span>exp<span style="COLOR: green"> &#8220;)&#8221; </span>statementlist</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>switch-stmt-&gt;<span style="COLOR: green">&#8221;switch&#8221;</span> exp <span style="COLOR: green">&#8220;{&#8220;</span> case-stmt <span style="COLOR: green">&#8220;}&#8221;</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>case-stmt-&gt;(<span style="COLOR: green">&#8221;case&#8221;</span> sym | <span style="COLOR: green">&#8220;default&#8221;</span>) <span style="COLOR: green">&#8220;:&#8221;</span> statementlist case-stmt</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>assign-stmt-&gt;exp <span style="COLOR: green">&#8220;=&#8221;</span> exp</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>call-stmt-&gt;sym <span style="COLOR: green">&#8220;(&#8220;</span> parameters <span style="COLOR: green">&#8220;)&#8221; &#8220;;&#8221;<o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>return-stmt-&gt;<span style="COLOR: green">&#8221;return&#8221;</span> exp</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>symlist-&gt;sym <span style="COLOR: blue">[</span>&#8220;,&#8221; symlist<span style="COLOR: blue">]</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>statement-&gt;<span style="COLOR: green">&#8220;{&#8220;</span> statementlist <span style="COLOR: green">&#8220;}&#8221;</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>statement-&gt;<span style="COLOR: green">&#8221;;&#8221;</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>statementlist-&gt;statement <span style="COLOR: blue">[</span>statementlist<span style="COLOR: blue">]</span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp-&gt;exp1</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp1-&gt;exp2</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp1-&gt;exp1 (<span style="COLOR: green">&#8220;&lt;&#8221;</span> | <span style="COLOR: green">&#8220;&lt;=&#8221;</span> | <span style="COLOR: green">&#8220;=&#8221;</span> | <span style="COLOR: green">&#8220;&gt;=&#8221;</span> | <span style="COLOR: green">&#8220;&gt;&#8221;</span> | <span style="COLOR: green">&#8220;!=&#8221;</span>) exp2</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp2-&gt;exp3</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp2-&gt;exp2 (<span style="COLOR: green">&#8220;+&#8221;</span> | <span style="COLOR: green">&#8220;-&#8220;</span>) exp3</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp3-&gt;exp4</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp3-&gt;exp3(<span style="COLOR: green">&#8220;*&#8221;</span> | <span style="COLOR: green">&#8220;/&#8221;</span>) exp4</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>exp4-&gt;<span style="COLOR: green">&#8221;(&#8220;</span> exp <span style="COLOR: green">&#8220;)&#8221;</span></span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/lwch/aggbug/118755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lwch/" target="_blank">lwch</a> 2010-06-26 10:37 <a href="http://www.cppblog.com/lwch/archive/2010/06/26/118755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>