﻿<?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++博客-龙与地下城的世界-随笔分类-编译原理/脚本语言开发</title><link>http://www.cppblog.com/SysProgrammer/category/12619.html</link><description>Memory Layout......</description><language>zh-cn</language><lastBuildDate>Thu, 24 Dec 2009 19:16:20 GMT</lastBuildDate><pubDate>Thu, 24 Dec 2009 19:16:20 GMT</pubDate><ttl>60</ttl><item><title>第2个简单的语言</title><link>http://www.cppblog.com/SysProgrammer/archive/2009/12/24/104001.html</link><dc:creator>Reno</dc:creator><author>Reno</author><pubDate>Thu, 24 Dec 2009 15:51:00 GMT</pubDate><guid>http://www.cppblog.com/SysProgrammer/archive/2009/12/24/104001.html</guid><wfw:comment>http://www.cppblog.com/SysProgrammer/comments/104001.html</wfw:comment><comments>http://www.cppblog.com/SysProgrammer/archive/2009/12/24/104001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/SysProgrammer/comments/commentRss/104001.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/SysProgrammer/services/trackbacks/104001.html</trackback:ping><description><![CDATA[编写了路径控制脚本后，准备尝试编写一个比它稍微复杂一点的脚本，该脚本具有变量定义，流程控制语句，和比较完善的布尔逻辑和混合四则表达式运算的功能.<br><br>// Unnamed simple script language products define as the&nbsp;flowing:<br>program ::= declaration_list<br>declaration_list ::= var_declaration | fun_declaration<br>var_declaration ::= DECLARE type_specifier_list ID; END<br>type_specifier_list ::= type_specifier type_specifier_list | EMPTY<br>type_specifier ::= VAR<br>fun_declaration ::= BEGIN statement_list END<br>statement_list ::= statement statement_list | EMPTY<br>statement ::= expression_stmt | compund_list | selection_stmt | iteration_stmt<br>expression_stmt ::= expression; | ;<br>compund_list ::= { statement_list }<br>selection_stmt :: IF ( expression ) statement | IF ( expression ) statement ELSE statement<br>ireation_stmt ::= WHILE ( expression ) statement<br>expression ::= var = expression | simple_expression<br>var ::= ID<br>simple_expression ::= additive_expression relop additive_expression | additive_expression<br>relop ::= &lt;= | &lt; | &gt; | &gt;= | == | !=<br>additive_expression ::= additive_expression addop term | term<br>addop ::= + | -<br>term ::= term mulop factor | factor<br>mulop ::= * | /<br>factor ::= ( expression ) | var | NUM 
<img src ="http://www.cppblog.com/SysProgrammer/aggbug/104001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/SysProgrammer/" target="_blank">Reno</a> 2009-12-24 23:51 <a href="http://www.cppblog.com/SysProgrammer/archive/2009/12/24/104001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PathInterpreter.h</title><link>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103847.html</link><dc:creator>Reno</dc:creator><author>Reno</author><pubDate>Wed, 23 Dec 2009 14:03:00 GMT</pubDate><guid>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103847.html</guid><wfw:comment>http://www.cppblog.com/SysProgrammer/comments/103847.html</wfw:comment><comments>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/SysProgrammer/comments/commentRss/103847.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/SysProgrammer/services/trackbacks/103847.html</trackback:ping><description><![CDATA[<p>&nbsp;</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">#ifndef&nbsp;PATH_INTERPRETER<br></span><span style="COLOR: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;PATH_INTERPRETER</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;WIN32_LEAN_AND_MEAN</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ctype.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;10</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">list</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><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"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;13</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::list;<br></span><span style="COLOR: #008080">&nbsp;14</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;15</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;MAX_WORD_LEN&nbsp;8&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;8&nbsp;Bytes</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;16</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;17</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ContexScan;<br></span><span style="COLOR: #008080">&nbsp;18</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;19</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;CPathScriptLoader</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;20</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CPathScriptLoader<br></span><span style="COLOR: #008080">&nbsp;21</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;22</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;23</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;Context;<br></span><span style="COLOR: #008080">&nbsp;24</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;25</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;LoadScript(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">szFile&nbsp;);<br></span><span style="COLOR: #008080">&nbsp;26</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">&nbsp;27</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;28</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;29</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Contex&nbsp;Lex<br></span><span style="COLOR: #008080">&nbsp;30</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;31</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;32</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ContexScan</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;33</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ContexScan<br></span><span style="COLOR: #008080">&nbsp;34</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;35</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;36</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000">&nbsp;ScanState&nbsp;{&nbsp;WORD,&nbsp;NOPRINT,&nbsp;};<br></span><span style="COLOR: #008080">&nbsp;37</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;38</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;39</span>&nbsp;<span style="COLOR: #000000">&nbsp;ContexScan();<br></span><span style="COLOR: #008080">&nbsp;40</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ContexScan();<br></span><span style="COLOR: #008080">&nbsp;41</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;42</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetExpression(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">szExpr&nbsp;);<br></span><span style="COLOR: #008080">&nbsp;43</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;44</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;SkipWord(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">szWord&nbsp;);<br></span><span style="COLOR: #008080">&nbsp;45</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;GetNextWord();<br></span><span style="COLOR: #008080">&nbsp;46</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;CurrentWord()&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_szCurrWord;&nbsp;}<br></span><span style="COLOR: #008080">&nbsp;47</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;NextWord();<br></span><span style="COLOR: #008080">&nbsp;48</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;RebackWordByCount(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n&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;49</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;RebackNearestWordByName(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">szWord&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;50</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;51</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;52</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_szExpr;<br></span><span style="COLOR: #008080">&nbsp;53</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_pLastChar;<br></span><span style="COLOR: #008080">&nbsp;54</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_pCurrChar;<br></span><span style="COLOR: #008080">&nbsp;55</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;m_szCurrWord[MAX_WORD_LEN];<br></span><span style="COLOR: #008080">&nbsp;56</span>&nbsp;<span style="COLOR: #000000">&nbsp;ScanState&nbsp;m_eState;<br></span><span style="COLOR: #008080">&nbsp;57</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">&nbsp;58</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;59</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;60</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Syntax&nbsp;Tree&nbsp;Nodes<br></span><span style="COLOR: #008080">&nbsp;61</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;62</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;AbstractNode</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;63</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;AbstractNode<br></span><span style="COLOR: #008080">&nbsp;64</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;65</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;66</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;AbstractNode(&nbsp;ContexScan</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;contex&nbsp;);<br></span><span style="COLOR: #008080">&nbsp;67</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">AbstractNode();<br></span><span style="COLOR: #008080">&nbsp;68</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;69</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Parse()&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">&nbsp;70</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;71</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;72</span>&nbsp;<span style="COLOR: #000000">&nbsp;ContexScan</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;m_RefContexScan;<br></span><span style="COLOR: #008080">&nbsp;73</span>&nbsp;<span style="COLOR: #000000">&nbsp;list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">AbstractNode&nbsp;</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">&nbsp;m_Nodes;<br></span><span style="COLOR: #008080">&nbsp;74</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">&nbsp;75</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;76</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ProgramNode</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;77</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ProgramNode&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;AbstractNode<br></span><span style="COLOR: #008080">&nbsp;78</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;79</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;80</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;ProgramNode(&nbsp;ContexScan</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;contex&nbsp;);<br></span><span style="COLOR: #008080">&nbsp;81</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ProgramNode();<br></span><span style="COLOR: #008080">&nbsp;82</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;83</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Parse();<br></span><span style="COLOR: #008080">&nbsp;84</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">&nbsp;85</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;86</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;CommandListNode</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;87</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CommandListNode&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;AbstractNode<br></span><span style="COLOR: #008080">&nbsp;88</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;89</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;90</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;CommandListNode(&nbsp;ContexScan</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;contex&nbsp;);<br></span><span style="COLOR: #008080">&nbsp;91</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CommandListNode();<br></span><span style="COLOR: #008080">&nbsp;92</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;93</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Parse();<br></span><span style="COLOR: #008080">&nbsp;94</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">&nbsp;95</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;96</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;CommandNode</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;97</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CommandNode&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;AbstractNode<br></span><span style="COLOR: #008080">&nbsp;98</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;99</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">100</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;CommandNode(&nbsp;ContexScan</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;contex&nbsp;);<br></span><span style="COLOR: #008080">101</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CommandNode();<br></span><span style="COLOR: #008080">102</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">103</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Parse();<br></span><span style="COLOR: #008080">104</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">105</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">106</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;RepeatNode</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">107</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;RepeatNode&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;AbstractNode<br></span><span style="COLOR: #008080">108</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">109</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">110</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;RepeatNode(&nbsp;ContexScan</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;contex&nbsp;);<br></span><span style="COLOR: #008080">111</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">RepeatNode();<br></span><span style="COLOR: #008080">112</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">113</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Parse();<br></span><span style="COLOR: #008080">114</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">115</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">116</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;BlockNode</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">117</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;BlockNode&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;AbstractNode<br></span><span style="COLOR: #008080">118</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">119</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">120</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;BlockNode(&nbsp;ContexScan</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;contex&nbsp;);<br></span><span style="COLOR: #008080">121</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">BlockNode();<br></span><span style="COLOR: #008080">122</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">123</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Parse();<br></span><span style="COLOR: #008080">124</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">125</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">126</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;PrimitiveNode</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">127</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;PrimitiveNode&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;AbstractNode<br></span><span style="COLOR: #008080">128</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">129</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">130</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;PrimitiveNode(&nbsp;ContexScan</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;contex&nbsp;);<br></span><span style="COLOR: #008080">131</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">PrimitiveNode();<br></span><span style="COLOR: #008080">132</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">133</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Parse();<br></span><span style="COLOR: #008080">134</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">135</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">136</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;CPathInterpret<br></span><span style="COLOR: #008080">137</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;The&nbsp;Interpreter&nbsp;Facade&nbsp;interface</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">138</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CPathInterpret<br></span><span style="COLOR: #008080">139</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">140</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">141</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000">&nbsp;InterpretMode&nbsp;{&nbsp;NDEBUG,&nbsp;DEBUG,&nbsp;};<br></span><span style="COLOR: #008080">142</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">143</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">144</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;InterpretMode&nbsp;m_Mode;<br></span><span style="COLOR: #008080">145</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">146</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">147</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;LoadScript(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">szFile&nbsp;);<br></span><span style="COLOR: #008080">148</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Interpret(&nbsp;InterpretMode&nbsp;mode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NDEBUG&nbsp;);<br></span><span style="COLOR: #008080">149</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">150</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">151</span>&nbsp;<span style="COLOR: #000000">&nbsp;CPathScriptLoader&nbsp;m_ScriptLoader;<br></span><span style="COLOR: #008080">152</span>&nbsp;<span style="COLOR: #000000">&nbsp;ContexScan&nbsp;&nbsp;&nbsp;m_ContexScaner;<br></span><span style="COLOR: #008080">153</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">154</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">155</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">156</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;PATH_INTERPRETER</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">157</span>&nbsp;<span style="COLOR: #000000"></span></div>
<img src ="http://www.cppblog.com/SysProgrammer/aggbug/103847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/SysProgrammer/" target="_blank">Reno</a> 2009-12-23 22:03 <a href="http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ConsoleMain.cpp</title><link>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103848.html</link><dc:creator>Reno</dc:creator><author>Reno</author><pubDate>Wed, 23 Dec 2009 14:03:00 GMT</pubDate><guid>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103848.html</guid><wfw:comment>http://www.cppblog.com/SysProgrammer/comments/103848.html</wfw:comment><comments>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/SysProgrammer/comments/commentRss/103848.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/SysProgrammer/services/trackbacks/103848.html</trackback:ping><description><![CDATA[<p>&#160;</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">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PathInterpreter.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><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: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[]&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">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;argc&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;printf(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Usage:&nbsp;ExecuableFileName&nbsp;ScriptFileName&nbsp;[-DEBUG|-debug]&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;);<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&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">11</span>&nbsp;<span style="COLOR: #000000">&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">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;argc&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;{<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;printf(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Warning:&nbsp;More&nbsp;parameters&nbsp;have&nbsp;expected,&nbsp;after&nbsp;the&nbsp;third&nbsp;has&nbsp;ignored!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;);<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&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">17</span>&nbsp;<span style="COLOR: #000000">&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">&nbsp;CPathInterpret&nbsp;Instance;<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;Instance.LoadScript(&nbsp;argv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;);<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;argc&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;{<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;strcmp(&nbsp;argv[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-DEBUG</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)&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;strcmp(&nbsp;argv[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-debug</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;Instance.Interpret(&nbsp;CPathInterpret::DEBUG&nbsp;);<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Warning:&nbsp;Unknown&nbsp;about&nbsp;the&nbsp;third&nbsp;parameter!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;);<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;}<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;Instance.Interpret();<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">&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">32</span>&nbsp;<span style="COLOR: #000000">}<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"></span></div>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/SysProgrammer/aggbug/103848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/SysProgrammer/" target="_blank">Reno</a> 2009-12-23 22:03 <a href="http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PathInterpreter.cpp</title><link>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103842.html</link><dc:creator>Reno</dc:creator><author>Reno</author><pubDate>Wed, 23 Dec 2009 13:57:00 GMT</pubDate><guid>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103842.html</guid><wfw:comment>http://www.cppblog.com/SysProgrammer/comments/103842.html</wfw:comment><comments>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103842.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/SysProgrammer/comments/commentRss/103842.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/SysProgrammer/services/trackbacks/103842.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;1&nbsp;#include&nbsp;"PathInterpreter.h"&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3&nbsp;//&nbsp;CPathScriptLoader&nbsp;&nbsp;4&nbsp;void&nbsp;CPathScriptLoader::LoadScript(&nbsp;const&nbsp;c...&nbsp;&nbsp;<a href='http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103842.html'>阅读全文</a><img src ="http://www.cppblog.com/SysProgrammer/aggbug/103842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/SysProgrammer/" target="_blank">Reno</a> 2009-12-23 21:57 <a href="http://www.cppblog.com/SysProgrammer/archive/2009/12/23/103842.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>运动路线控制脚本语言</title><link>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/Reno.html</link><dc:creator>Reno</dc:creator><author>Reno</author><pubDate>Wed, 23 Dec 2009 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/Reno.html</guid><wfw:comment>http://www.cppblog.com/SysProgrammer/comments/103817.html</wfw:comment><comments>http://www.cppblog.com/SysProgrammer/archive/2009/12/23/Reno.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/SysProgrammer/comments/commentRss/103817.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/SysProgrammer/services/trackbacks/103817.html</trackback:ping><description><![CDATA[<p>最近在做仿雷电的游戏，其中敌人飞船的运动路线和特征需要能灵活的设置，并且尽量少动其他部分的代码，于是我的想法是把每种类型的飞船指定的运动路线存入脚本中，然后由引擎根据脚本执行.<br>因此可以把飞船的路线看成是由一系列的关键点组成，每个点有比如3个属性，X速度，Y速度和保持该速度的持续时间。而路线的运动轨迹可以由简单的脚本语言来定义，比如也许需要在某几个点之间重复移动一定的次数。</p>
<p>以下是一个Script Demo:<br><br>GO<br>&nbsp;&nbsp;&nbsp; BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.0 0.0 500<br>&nbsp;&nbsp;&nbsp; END<br>&nbsp;&nbsp;&nbsp; BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1.0 0.0 500<br>&nbsp;&nbsp;&nbsp; END<br>&nbsp;&nbsp;&nbsp; REPEAT 4<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0 1.0 500<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.0 0.0 500<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0 -1.0 500<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1.0 0.0 500<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END<br>&nbsp;&nbsp;&nbsp; END<br>END<br><br>表示先左右移动一次，然后向下，向右，向上，向左呈矩形移动4次，通过设置速度分量可以实现任何路线的移动以及其他特征。<br>该脚本语言解释器采用了2个设计模式，Facade和Interpret模式，其中的解释器使用了几乎和任何设计模式书上介绍的一样的结构，很经典呐~<br><br>附上语言的文法定义:<br>program ::= GO command_list<br>command_list ::= command* END<br>command ::= begin_end_block | repeat<br>begin_end_block ::= BEGIN primitive END // Leaf Node on the Syntax tree<br>repeat ::= REPEAT INT command_list<br>primitive ::= SpeedX,SpeedY,Time // Recursive exit<br><br>// TestScript.txt<br>GO<br>&nbsp;&nbsp;BEGIN<br>&nbsp;&nbsp;&nbsp;1.0,0.0,500<br>&nbsp;&nbsp;END<br>&nbsp;&nbsp;BEGIN<br>&nbsp;&nbsp;&nbsp;-1.0,0.0,500<br>&nbsp;&nbsp;END<br>&nbsp;&nbsp;REPEAT 4<br>&nbsp;&nbsp;&nbsp;BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp;0.0,1.0,500<br>&nbsp;&nbsp;&nbsp;END<br>&nbsp;&nbsp;&nbsp;BEGIN<br>&nbsp;&nbsp;&nbsp;&nbsp;0.0,-1.0,500<br>&nbsp;&nbsp;&nbsp;END<br>&nbsp;&nbsp;END<br>END<br><br>// Execute result:</p>
<p><img height=377 alt="" src="http://www.cppblog.com/images/cppblog_com/sysprogrammer/path_interpret.JPG" width=455 border=0></p>
<img src ="http://www.cppblog.com/SysProgrammer/aggbug/103817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/SysProgrammer/" target="_blank">Reno</a> 2009-12-23 16:58 <a href="http://www.cppblog.com/SysProgrammer/archive/2009/12/23/Reno.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>