﻿<?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++博客-&lt;h1&gt;升C小调狂想曲&lt;/h1&gt;-随笔分类-Things about wchar_t*</title><link>http://www.cppblog.com/ckyap/category/7743.html</link><description>&lt;递归的忧伤&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 08 Aug 2008 17:53:49 GMT</lastBuildDate><pubDate>Fri, 08 Aug 2008 17:53:49 GMT</pubDate><ttl>60</ttl><item><title>第一行代码 --- CNScript 成长日记（4）</title><link>http://www.cppblog.com/ckyap/archive/2008/08/09/58361.html</link><dc:creator>陈坤</dc:creator><author>陈坤</author><pubDate>Fri, 08 Aug 2008 17:27:00 GMT</pubDate><guid>http://www.cppblog.com/ckyap/archive/2008/08/09/58361.html</guid><wfw:comment>http://www.cppblog.com/ckyap/comments/58361.html</wfw:comment><comments>http://www.cppblog.com/ckyap/archive/2008/08/09/58361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ckyap/comments/commentRss/58361.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ckyap/services/trackbacks/58361.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 首先祝贺北京奥运会精彩开幕！！我亲眼见到了鸟巢的壮观景象，跟一堆外国人在一起看开幕式时我第一次感觉这么自豪！加油奥运，加油中国！今天把词法分析器写好了，一个巨大的switch。代码如下：//CNScriptLex.h&nbsp;1&nbsp;#ifndef&nbsp;CNSCRIPTLEX_H&nbsp;2&nbsp;#define&nbsp;CNSCRIPTLEX_H&nbsp;3&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/ckyap/archive/2008/08/09/58361.html'>阅读全文</a><img src ="http://www.cppblog.com/ckyap/aggbug/58361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ckyap/" target="_blank">陈坤</a> 2008-08-09 01:27 <a href="http://www.cppblog.com/ckyap/archive/2008/08/09/58361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你好，状态图 --- CNScript 成长日记（3）</title><link>http://www.cppblog.com/ckyap/archive/2008/08/08/58293.html</link><dc:creator>陈坤</dc:creator><author>陈坤</author><pubDate>Thu, 07 Aug 2008 16:15:00 GMT</pubDate><guid>http://www.cppblog.com/ckyap/archive/2008/08/08/58293.html</guid><wfw:comment>http://www.cppblog.com/ckyap/comments/58293.html</wfw:comment><comments>http://www.cppblog.com/ckyap/archive/2008/08/08/58293.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/ckyap/comments/commentRss/58293.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ckyap/services/trackbacks/58293.html</trackback:ping><description><![CDATA[<p>上一篇我已经将各个词法标记都设计好了，现在我们需要写出一个程序，他读入一个字符串，并输出一系列Token，其中每个Token就是一个词法标记，例如Keyword，Identifier，Number，Operator。<br><br>假设我们输入int a=100;这样一个字符串作为代码，那么我们将如何分析呢？<br><br>首先读入i，&#8220;i&#8221;符合Identifier的规则，但是继续读下去还有个n，一共是&#8220;in&#8221;，&#8220;in&#8221;也符合Identifier的规则，再读，变成&#8220;int&#8221;，&#8220;int&#8221;符合Type的规则，继续读入后面的空格，变成&#8220;int &#8221;，这个可不符合任何规则了，因此我们不能承认这一步，只好取上一步的可接受的结果Type：&#8220;int&#8221;。这样我们就生成了第一个Token，他的类型是Type，值是&#8220;int&#8221;。以此类推，我们可以读完整个程序，并完成整个词法分析的过程。<br><br>但是每一次都去判断整个已读入的字符串是否匹配某个规则，效率非常低，我们需要一种线性读入字符串，并实时掌握目前字符串匹配状况的办法。确定性有穷自动机（DFA）就是这样一种状态机。<br><br>下面是我为CNScript画出的状态图：<br><img height=479 alt="" src="http://www.cppblog.com/images/cppblog_com/ckyap/status_1.jpg" width=308 border=0><br><img height=562 alt="" src="http://www.cppblog.com/images/cppblog_com/ckyap/status_2.jpg" width=567 border=0><br><img height=454 alt="" src="http://www.cppblog.com/images/cppblog_com/ckyap/status_3.jpg" width=480 border=0></p>
<p><img height=121 alt="" src="http://www.cppblog.com/images/cppblog_com/ckyap/status_4.jpg" width=420 border=0><br><br>例如刚才读的int a=100；<br>我们一开始是在编号为0的状态，现在输入i，因为i属于a-zA-Z的范围，所以通过最后一幅图我们看到，我们将迈向编号为44的状态。再输入n，因为n属于a-zA-Z0-9_的范围，所以我们继续走在编号44的状态，t也如此，但是输入空格时，我们发现44号状态没有接受空格字符的出口，也就是无法继续走下去了，而且44号状态是一个可接受状态，所以我们接受已经输入了的&#8220;int&#8221;。<br>在这里我们的44号状态，接受意义是一个name，可以是Identifier，也可以是Keyword，也可以是Type，当我们取得name：&#8220;int&#8221;时，我们再判断发现这是一个Type，所以我们得出Token：Type：&#8220;int&#8221;。然后状态回到0号，继续输入刚才的空格。以此类推。<br><br>所以我们只要按这个状态图去遍历字符串，我们就会不断的在各个状态中辗转反复，并不断的得出Tokens。这就是我们词法分析的基本原理。<br>下一篇我会写出这个DFA的代码和具体使用方案。</p>
<img src ="http://www.cppblog.com/ckyap/aggbug/58293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ckyap/" target="_blank">陈坤</a> 2008-08-08 00:15 <a href="http://www.cppblog.com/ckyap/archive/2008/08/08/58293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>绘制蓝图 --- CNScript 成长日记（2）</title><link>http://www.cppblog.com/ckyap/archive/2008/08/05/58099.html</link><dc:creator>陈坤</dc:creator><author>陈坤</author><pubDate>Tue, 05 Aug 2008 15:41:00 GMT</pubDate><guid>http://www.cppblog.com/ckyap/archive/2008/08/05/58099.html</guid><wfw:comment>http://www.cppblog.com/ckyap/comments/58099.html</wfw:comment><comments>http://www.cppblog.com/ckyap/archive/2008/08/05/58099.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/ckyap/comments/commentRss/58099.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ckyap/services/trackbacks/58099.html</trackback:ping><description><![CDATA[要写一个脚本引擎，首先要明确脚本长什么样，具备哪些功能，需要有怎样的能力。<br>Since昨天我说第一版是面向过程，强类型，无闭包，无自定义结构，支持数组，那么我将脚本设计如下：<br><br>
<h1 style="MARGIN: 17pt 0cm 16.5pt"><span lang=EN-US><font face=Calibri color=#000000 size=6>CNScript 0.1 Draft</font></span></h1>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><font face=Calibri><span lang=EN-US style="FONT-SIZE: 16pt">Functionality:</span><span lang=EN-US> </span></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>Procedure Oriented, No Custom Data Structures, No Closures, Strong Typed, Array Supported.</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 16pt"><font face=Calibri>Keywords:<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>int,double,char,string,bool,void,if,else,for,do,while,return</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 16pt"><font face=Calibri>Statements:<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>Single Expression:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><font face=Calibri><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US>expression</span></em></strong><span lang=EN-US>;</span></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>Chunk:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">Statement1<o:p></o:p></em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">Statement2<o:p></o:p></em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>}</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>Array Declaration:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><font face=Calibri><em style="mso-bidi-font-style: normal"><span lang=EN-US>type</span></em><span lang=EN-US> <em style="mso-bidi-font-style: normal">name</em>[<em style="mso-bidi-font-style: normal">size</em>];</span></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>Variable Declaration:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><font face=Calibri><em style="mso-bidi-font-style: normal"><span lang=EN-US>type</span></em><span lang=EN-US> <em style="mso-bidi-font-style: normal">name</em> [= <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong>];</span></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>Function definition:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><font face=Calibri><em style="mso-bidi-font-style: normal"><span lang=EN-US>type</span></em><span lang=EN-US> <em style="mso-bidi-font-style: normal">FunctionName</em>(<em style="mso-bidi-font-style: normal">type paramName1, type paramName2</em>)</span></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><font face=Calibri>Chunk<o:p></o:p></font></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>IF-ELSE:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>if(<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong>)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><font face=Calibri>Statement1<o:p></o:p></font></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>else</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><font face=Calibri>Statement2<o:p></o:p></font></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>FOR-LOOP:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>for(<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">statement1</em></strong> <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong>;<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression3</em></strong>)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><font face=Calibri>Statement<o:p></o:p></font></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>WHILE-LOOP:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>while(<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong>)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><font face=Calibri>Statement<o:p></o:p></font></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>DO-WHILE-LOOP:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>do</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd; tab-stops: 171.75pt"><font face=Calibri><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US>Statement</span></em></strong><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>while(<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong>);</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<span lang=EN-US><font face=Calibri>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 16pt">Expressions:<o:p></o:p></span></p>
</font></span>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Values:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>true</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>false</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em style="mso-bidi-font-style: normal">number<o:p></o:p></em></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em style="mso-bidi-font-style: normal">string<o:p></o:p></em></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><em style="mso-bidi-font-style: normal"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>char<o:p></o:p></font></span></em></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em style="mso-bidi-font-style: normal">Variable Name<o:p></o:p></em></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><font face=Calibri><em style="mso-bidi-font-style: normal"><span lang=EN-US><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Array Name</span></em><span lang=EN-US>[<em style="mso-bidi-font-style: normal">index</em>]<em style="mso-bidi-font-style: normal"><o:p></o:p></em></span></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Assign:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em style="mso-bidi-font-style: normal">name</em> = <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Function Call:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em style="mso-bidi-font-style: normal">name</em>(<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong>,<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong>)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Compares:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> == <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> != <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> &lt; <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> &gt; <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> &lt;= <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> &gt;= <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Boolean Operations:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>!<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> &amp;&amp; <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> || <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Calculating:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong>++</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong>—</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>++<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>--<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> + <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> &#8211; <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> * <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> / <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> % <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2</em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression1</em></strong> ^ <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression2<o:p></o:p></em></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><font face=Calibri><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span lang=EN-US><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></em></strong><span lang=EN-US>(<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong>)</span></font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-SIZE: 16pt"><font face=Calibri>Lexical Tokens:<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><font face=Calibri>Spaces:<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Space:<span style="mso-tab-count: 3">&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><strong style="mso-bidi-font-weight: normal">(space_bar+)|(\n+) (\r+)|(\t+)<o:p></o:p></strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><font face=Calibri>TypeNames:<o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Type:<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">(int)|(double)|(char)|(string)|(bool)|(void)</strong><o:p></o:p></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>Keywords:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Keyword_if:<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">if</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Keyword_else: <span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">else</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Keyword_for:<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">for</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Keyword_do:<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">do</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Keyword_while:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">while</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Keyword_return:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">return</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>Brackets:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BigLeftBracket:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">{</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BigRightBracket:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">}</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MidLeftBracket:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">[</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MidRightBracket:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">]</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SmallLeftBracket:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">\(</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SmallRightBracket:<span style="mso-tab-count: 1"> </span><strong style="mso-bidi-font-weight: normal">\)</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>Identifier:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Identifier:<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">(_+[a-zA-Z0-9_]+)|([a-zA-Z][a-zA-Z0-9_]*)</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>Number Value:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Integer:<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">0|[1-9][0-9]*</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Double:<span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">(0|[1-9][0-9]*)\.[0-9]+</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>Bool Value:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BoolValue:<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">true|false</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>Char:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CharValue:<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">&#8216;(\\[^\r\n\t])|([^&#8217;\r\n\t])&#8217;</strong></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face=Calibri>String:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; tab-stops: 21.0pt 42.0pt 63.0pt 84.0pt 105.0pt 126.0pt 147.0pt 168.0pt 189.0pt 380.25pt"><span lang=EN-US><font face=Calibri><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>StringValue:<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">&#8220;((\\&#8221;)|[^\r\n])*&#8221;<span style="mso-tab-count: 1">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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><o:p></o:p></strong></font></span></p>
<span lang=EN-US><font face=Calibri>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Operators:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Operator:<span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong style="mso-bidi-font-weight: normal">=|\+|-|\*|/|%|^|(++)|(--)|(&amp;&amp;)|(\|\|)|(!)|&lt;|&gt;|(&lt;=)|(&gt;=)|(==)|(!=)<o:p></o:p></strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Seprators:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Seprator:<span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong style="mso-bidi-font-weight: normal">;</strong></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
以上就是脚本设计初稿，如果后面发现有错误，会去更正的。<br><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: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Foo(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;value)<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;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;value;<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"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<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;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&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">100</span><span style="COLOR: #000000">;i</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;{<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">a;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(a</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foo(a);<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<br><br>基本上就是个没模板，没类，没指针的C++了。<br><br>设计就这样了，明天开始写词法分析喔！上面的Lexical Tokens就是给词法分析用的，因为代码是字符串，我们先要把整个字符串读成一个一个的Token，才方便进行语法分析和更深入的处理，比如<br>int a = 100;<br>要先拆成[type:int] [space] [identifier:a] [space] [operator:=] [space] [integer:100] [seperator:;]<br>这个过程就是词法分析了。<br><br>词法分析完了得出这些Tokens然后再匹配到<br>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><span lang=EN-US><font face=Calibri>Variable Declaration:</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; mso-para-margin-left: 2.0gd"><font face=Calibri><em style="mso-bidi-font-style: normal"><span lang=EN-US>type</span></em><span lang=EN-US> <em style="mso-bidi-font-style: normal">name</em> [= <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">expression</em></strong>];<br><br></span></font>才能建立起语法树来。<br>Lexical Tokens中是每种Token对应的正则表达式。</p>
<img src ="http://www.cppblog.com/ckyap/aggbug/58099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ckyap/" target="_blank">陈坤</a> 2008-08-05 23:41 <a href="http://www.cppblog.com/ckyap/archive/2008/08/05/58099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>摩拳擦掌 --- CNScript 成长日记（1）</title><link>http://www.cppblog.com/ckyap/archive/2008/08/05/58032.html</link><dc:creator>陈坤</dc:creator><author>陈坤</author><pubDate>Tue, 05 Aug 2008 00:46:00 GMT</pubDate><guid>http://www.cppblog.com/ckyap/archive/2008/08/05/58032.html</guid><wfw:comment>http://www.cppblog.com/ckyap/comments/58032.html</wfw:comment><comments>http://www.cppblog.com/ckyap/archive/2008/08/05/58032.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/ckyap/comments/commentRss/58032.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ckyap/services/trackbacks/58032.html</trackback:ping><description><![CDATA[我早就想写一个脚本引擎了，真的。<br><br>事情可以追溯到大一的时候，很想做游戏（虽然后来发现美工成了最大的问题），于是自己写了一套GUI，用起来还挺爽，但是就是一直觉得缺了个脚本引擎。<br><br>于是，奉天承运，我开始着手脚本引擎的计划了。<br><br>话说起码得先跟字符串培养培养感情，而且也是为了以后写脚本引擎时能省些苦力，还有很多其他因素影响，我决定先写一个正则表达式引擎。为了方便，我又得封一个性格良好，功能顽强的String类，要真的实现功能顽强，又得搞好Encoding方面的事情，要方便调试程序，又得把Console和IO方面的东西封好。于是我干脆就跟他拼了，封了一个类.Net的小类库出来。为了好看，名字空间搞得跟.Net的一模一样，用起来也挺顺溜的。<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">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">System.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><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">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;System;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;System::Text::RegularExpressions;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;System::Windows::Forms;<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: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Program(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;String</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;arg)<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">&nbsp;&nbsp;&nbsp;&nbsp;Application::RunConsoleApplication();<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;Regex&nbsp;exampleExp(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">(+\\w+):(+\\z+)</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;String&nbsp;exampleString&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello:哈喽!!!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<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">&nbsp;&nbsp;&nbsp;&nbsp;Int64&nbsp;startTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetTickCount();<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Match</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;exampleExp.Match(exampleString);<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Int64&nbsp;endTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetTickCount();<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;Console::WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">---------KSystem&nbsp;Example&nbsp;Program---------</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;Console::WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Example&nbsp;Regex:\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;exampleExp.Pattern());<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Console::WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Example&nbsp;String:\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;exampleString);<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Console::WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Matched&nbsp;Value:\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Value());<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Console::WriteLine(m</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Captures[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</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">&nbsp;m</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Captures[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Console::WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Time&nbsp;Cost:\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;String::ToString(endTime&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;startTime)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;ms</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;Console::WriteLine(</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">25</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</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">27</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<br>不要问我为什么字符串前面不加L，也不要问我为什么没有delete那个m，我的库会干这些事情的。表达式中那个\z是匹配中文字的意思<br>运行结果：<br><img height=149 alt="" src="http://www.cppblog.com/images/cppblog_com/ckyap/example.JPG" width=340 border=0><br><br>做这么个正则表达式，还输掉了我一餐pizza。当时跟vczh同学打赌，他说我写完肯定有bug，我说我肯定没bug。结果不出意料地有bug，于是一餐华丽的pizza被送进了我们肚子。重要经验：是个程序必然有bug，恩恩。<br><br>这个正则表达式引擎刚写出来时性能奇差无比，主要时间耗在了内存分配上。经过一系列优化，vczh也跟着我一起优化了他那个正则表达式引擎，到最后某次性能测试时，我的花了13秒，vczh同学的花了12秒，也有时候是我的更快，视表达式写法不同而略有差别，基本上平均下来是一样的。（boost和greta花了40+N秒）<br><br>有了正则表达式引擎，也有了跟字符串几个月的感情，现在终于开始计划脚本引擎了。由于还是第一次，总有点畏首畏尾的，我决定先写一个非常菜的版本。强类型，无闭包，面向过程，支持数组，不支持自定义结构。这是我计划的CNScript的第一版本，也称CaiNiaoScript。<br><br>其实我真的想实现的是CNScript的第二个版本，ChinaScript。这会是一个类自然语言写法的中文脚本引擎。写起来变量和函数命名绝对会很不习惯，但是写完之后却会像一篇文章一样流利。<br><br><br>例如：现在用C++，模拟一个人使用某个交通工具去某个地方的行为。<br><br>Class TrafficTool;<br><br>Class Car : public TrafficTool;<br><br>Class Man<br>{<br>&nbsp;&nbsp;&nbsp;void TravelTo(Point destination, TrafficTool* trafficTool);<br>};<br><br>用起来就是<br><br>Man Peter;<br>TrafficTool* BMW = new Car();<br>Point beijing;<br><br>Peter.TravelTo(beijing, BMW);<br><br>虽然程序员一看就能理解个大概，但是非程序员很难使用或维护它。在将来的CNScript中，也许会是这样（估计最后不会这么罗嗦）：<br><br>有一种东西叫交通工具，汽车就是一种交通工具。<br>有一种东西叫人。 //我承认这句话有点怪，语法细节问题需要仔细琢磨，谁有好的建议可以留言给我喔，感激万分<br>有一种东西叫做目的地。<br><br>有一种行为：一个人乘坐一个交通工具去往一个目的地。<br><br>//以上是声明，以下是使用这几个类的代码<br><br>有一个人叫Peter。<br>有一个汽车叫宝马。<br>有一个目的地叫北京。<br><br>Peter乘坐宝马去往北京。<br><br>这样的代码，虽然在函数和变量命名时要仔细考虑，但是写出来的代码即使是不懂程序的人也能看明白，为的是兼顾游戏开发的各个环节的人员。<br><br>好了，想法到此为止，今晚开始动工CNScript的第一版，CaiNiaoScript! 我会把我每个阶段的工作和工作原理都写在这篇日记中，有兴趣的朋友可以跟着一起玩玩喔！ 
<img src ="http://www.cppblog.com/ckyap/aggbug/58032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ckyap/" target="_blank">陈坤</a> 2008-08-05 08:46 <a href="http://www.cppblog.com/ckyap/archive/2008/08/05/58032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>