<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>My Study</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/study/" />
    <link rel="self" type="application/atom+xml" href="http://my.huhoo.net/study/atom.xml" />
    <id>tag:my.huhoo.net,2007-07-05:/study//1</id>
    <updated>2008-09-22T02:23:52Z</updated>
    <subtitle>About My learn or Study etc.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Open Source 4.21-zh-cn</generator>

<entry>
    <title>cppreference改版啦</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/09/cppreference.html" />
    <id>tag:my.huhoo.net,2008:/study//1.711</id>

    <published>2008-09-22T02:22:31Z</published>
    <updated>2008-09-22T02:23:52Z</updated>

    <summary>著名的c/c++手册网站：http://www.cppreference.com...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="新闻娱乐" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cppreference" label="cppreference" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[著名的c/c++手册网站：http://www.cppreference.com/index.html改了一下风格，还有点不适应了。<br /><br />内容还是没有啥变化。 <br /> ]]>
        
    </content>
</entry>

<entry>
    <title>malloc,calloc,realloc内存分配函数的区别</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/09/malloccallocrealloc.html" />
    <id>tag:my.huhoo.net,2008:/study//1.699</id>

    <published>2008-09-10T03:13:14Z</published>
    <updated>2008-09-10T03:26:57Z</updated>

    <summary>转帖一篇文章。三个函数的申明分别是: void* realloc(void* p...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="Linux世界" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="calloc" label="calloc" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="malloc" label="malloc" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="realloc" label="realloc" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[转帖一篇文章。<br /><br />三个函数的申明分别是:
<br />void* realloc(void* ptr, unsigned newsize);
<br />void* malloc(unsigned size);
<br />void* calloc(size_t numElements, size_t sizeOfElement);
<br />都在stdlib.h函数库内
<br />
<br />它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL
<br />
<br />malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
<br />char* p;
<br />p=(char*)malloc(20);
<br />
<br />calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如:
<br />char* p;
<br />p=(char*)calloc(20,sizeof(char));
<br />这个例子与上一个效果相同
<br />
<br />realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度
<br />如:
<br />char* p;
<br />p=(char*)malloc(sizeof(char)*20);
<br />p=(char*)realloc(p,sizeof(char)*40);
<br />
<br />注意，这里的空间长度都是以字节为单位。
<br />
<br />C语言的标准内存分配函数：malloc，calloc，realloc，free等。
<br />malloc与calloc的区别为1块与n块的区别：
<br />malloc调用形式为(类型*)malloc(size)：在内存的动态存储区中分配一块长度为&#8220;size&#8221;字节的连续区域，返回该区域的首地址。
<br />calloc调用形式为(类型*)calloc(n，size)：在内存的动态存储区中分配n块长度为&#8220;size&#8221;字节的连续区域，返回首地址。
<br />realloc调用形式为(类型*)realloc(*ptr，size)：将ptr内存大小增大到size。
<br />free的调用形式为free(void*ptr)：释放ptr所指向的一块内存空间。
<br />C++中为new/delete函数。 ]]>
        
    </content>
</entry>

<entry>
    <title>一套make模板</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/09/make.html" />
    <id>tag:my.huhoo.net,2008:/study//1.696</id>

    <published>2008-09-09T08:26:00Z</published>
    <updated>2008-09-09T09:34:09Z</updated>

    <summary><![CDATA[&nbsp;&nbsp;&nbsp; 以前弄个一套自动生成makefile的模板...]]></summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="Linux世界" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="make" label="make" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[&nbsp;&nbsp;&nbsp; 以前弄个一套<a href="http://my.huhoo.net/archives/2008/03/makefile.html">自动生成makefile的模板</a>，但这次的与以前不一样的是，这个不是自动生成makefile，而是一套makefile模板。<br /><br /><br /><br /><br /> ]]>
        <![CDATA[&nbsp;&nbsp;&nbsp; 这套模板可以根据项目需求任意添加子目录，当然这个子目录是完成项目的某个功能，我们可以将模板里面的makefile文件copy进去，根据简单的提示，完成本目录下源文件的补充以及相关的需求进行功能的增加和删减，非常方便。<br />&nbsp;&nbsp; 对于大、中型开发项目的过程来说都比较使用，更灵活的是，由于子目录的独立性，这套模板方便了团队之间的合作，对于开发是一款非常灵活的模板软件。<br /><br />文件下载：<br /><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://my.huhoo.net/archives/upload/template_make.tar.gz">template_make.tar.gz</a></span><br /><div><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://my.huhoo.net/archives/upload/template_make.tar.bz2">template_make.tar.bz2</a></span></div><div><br /></div>]]>
    </content>
</entry>

<entry>
    <title>在linux下设置开机自动启动程序的方法</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/09/linux_2.html" />
    <id>tag:my.huhoo.net,2008:/study//1.695</id>

    <published>2008-09-09T04:37:45Z</published>
    <updated>2008-09-09T04:40:31Z</updated>

    <summary>下面用自启动apache为例; 自启动脚本: /usr/local/apache...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="Linux世界" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bash" label="bash" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="系统启动" label="系统启动" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="etc" label="etc" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="initd" label="init.d" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rcd" label="rc.d" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[下面用自启动apache为例;<br />
自启动脚本:<br />
/usr/local/apache2/bin；<br />
./apachectl start<br />
文件位于/etc/rc.d/init.d下,名为apached, 注意要可执行.<br />
#chmod +x /etc/rc.d/init.d/apached //设置文件的属性为可执行<br />
#ln -s /etc/rc.d/init.d/apached /etc/rc3.d/S90apache //建立软连接,快捷方式<br />
#ln -s /etc/rc.d/init.d/apached /etc/rc0.d/K20apache ]]>
        <![CDATA[<p>在Red Hat Linux中自动运行程序<br />
1．开机启动时自动运行程序<br />
Linux加载后, 它将初始化硬件和设备驱动,
然后运行第一个进程init。init根据配置文件继续引导过程，启动其它进程。通常情况下，修改放置在 /etc/rc或 /etc/rc.d 或
/etc/rc?.d 目录下的脚本文件，可以使init自动启动其它程序。例如：编辑 /etc/rc.d/rc.local
文件，在文件最末加上一行"xinit"或"startx"，可以在开机启动后直接进入X－Window。<br />
<br />
2．登录时自动运行程序<br />
用户登录时，bash首先自动执行系统管理员建立的全局登录script
：/etc/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个：/.bash_profile、/.bash_login、
/.profile，但只执行最先找到的一个。<br />
因此，只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序（类似于DOS下的Autoexec.bat）。<br />
<br />
3．退出登录时自动运行程序<br />
退出登录时，bash自动执行个人的退出登录脚本/.bash_logout。例如，在/.bash_logout中加入命令"tar －cvzf c.source.tgz ＊.c"，则在每次退出登录时自动执行 "tar" 命令备份 ＊.c 文件。<br />
<br />
4．定期自动运行程序<br />
Linux有一个称为crond的守护程序，主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容，并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。<br />
例如，建立文件crondFile，内容为"00 9 23 Jan ＊ HappyBirthday"，运行"crontab cronFile"命令后，每当元月23日上午9:00系统自动执行"HappyBirthday"的程序（"＊"表示不管当天是星期几）。<br />
<br />
5．定时自动运行程序一次<br />
定时执行命令at 与crond 类似（但它只执行一次）：命令在给定的时间执行，但不自动重复。at命令的一般格式为：at [ －f file ] time ，在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令：<br />
<br /></p><blockquote>
＄ at 12:00<br />
at&gt;mailto Roger －s ″Have a lunch″ &lt; plan.txt<br />
at&gt;Ctr－D<br />
Job 1 at 2000－11－09 12:00<br /></blockquote><p>
<br />
2000－11－09 12:00时候自动发一标题为"Have a lunch"，内容为plan.txt文件内容的邮件给Roger。</p>
<p> </p>
<blockquote>#!/bin/bash <br />
RESTART="........" #里面写相应服务代码 <br />
START="......." <br />
STOP=".........." <br />
case "$1" in <br />
restart) <br />
$RESTART <br />
echo "......" <br />
;; <br />
start) <br />
$START <br />
echo "......" <br />
;; <br />
STOP) <br />
$STOP <br />
echo "......" <br />
;; <br />
*) <br />
echo "Usage: $0 {restart ¦ start ¦ stop}" <br />
exit 1 <br />
esac <br /><br />
exit 1 <br /></blockquote>
脚本写完要修改一下权限 chmod u+x test.sh
<p> </p>
<p>首先，linux随机启动的服务程序都在/etc/init.d这个文件夹里，里面的文件全部都是脚本文件（脚本程序简单的说就是把要运行的程序写
到一个 文件里让系统能够按顺序执行，类似windows下的autorun.dat文件），另外在/etc这个文件夹里还有诸如名为rc1.d,
rc2.d一直到rc6.d的文件夹，这些都是linux不同的runlevel，我们一般进入的X
windows多用户的运行级别是第5级，也就是rc5.d，在这个文件夹下的脚本文件就是运行第5级时要随机启动的服务程序。需要注意的是，在每个rc
(1-6).d文件夹下的文件其实都是/etc/init.d文件夹下的文件的一个软连接（类似windows中的快捷方式），也就是说，在
/etc/init.d文件夹下是全部的服务程序，而每个rc(1-6).d只链接它自己启动需要的相应的服务程序！ <br />
<br />
要启动scim(某一程序)，我们首先要知道scim程序在哪里，用locate命令可以找到，scim在/usr/bin/scim这里，其中usr表
示是
属于用户的，bin在linux里表示可以执行的程序。这样，我就可以编写一个脚本程序，把它放到/etc/init.d里，然后在rc5.d里做一个相
应的软链接就可以了。 <br />
这个脚本其实很简单，就两行： <br />
<br /></p><blockquote>
#!/bin/bash <br />
/usr/bin/scim <br /></blockquote><p>
<br />
第一行是声明用什么终端运行这个脚本，第二行就是要运行的命令。 <br />
<br />
还需要注意的一点是，在rc5.d里，每个链接的名字都是以S或者K开头的，S开头的表示是系统启动是要随机启动的，K开头的是不随机启动的。这
样，你就可以知道，如果我要哪个服务随机启动，就把它名字第一个字母K改成S就可以了，当然，把S改成K后，这个服务就不能随机启动了。因此，我这个链接
还要起名为SXXX，这样系统才能让它随机启动。</p><br />原文：http://hi.baidu.com/lovehmp/blog/item/cb76ec6ecf2eefde80cb4af6.html]]>
    </content>
</entry>

<entry>
    <title>Virtualbox2.0发布了</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/09/virtualbox20.html" />
    <id>tag:my.huhoo.net,2008:/study//1.692</id>

    <published>2008-09-06T14:55:49Z</published>
    <updated>2008-09-06T15:22:19Z</updated>

    <summary>VirtualBox是一个半虚拟的软件，个人感觉比VMware快，我一般使用Fe...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="Linux世界" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="fedora" label="fedora" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ubuntu" label="Ubuntu" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="virtualbox" label="virtualbox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="windowsxp" label="windowsXP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[VirtualBox是一个半虚拟的软件，个人感觉比VMware快，我一般使用Fedora系统，在Fedora系统里，虚拟一个WindowsXP系统和Ubuntu系统。<br />VirtualBox1.6在9月2号发布，VirtualBox2.0在9月4日就发布了。这里发布主要针对Mac OS X系统的一些功能，官方原文如下： ]]>
        <![CDATA[This version is a major update. The following major new features were added:

<ul><li>64 bits guest support (64 bits host only)
</li><li>New native Leopard user interface on Mac OS X hosts
</li><li>The GUI was converted from Qt3 to Qt4 with many visual improvements
</li><li>New-version notifier
</li><li>Guest property information interface
</li><li>Host Interface Networking on Mac OS X hosts
</li><li>New Host Interface Networking on Solaris hosts
</li><li>Support for Nested Paging on modern AMD CPUs (major performance gain)
</li><li>Framework for collecting performance and resource usage data (metrics)
</li><li>Added SATA asynchronous IO (NCQ: Native Command Queuing) when accessing raw disks/partitions (major performance gain)
</li><li>Clipboard integration for OS/2 Guests
</li><li>Created separate SDK component featuring a new Python programming interface on Linux and Solaris hosts
</li><li>Support for VHD disk images
</li></ul><p>
In addition, the following items were fixed and/or added:
</p>
<ul><li>VMM: VT-x fixes
</li><li>AHCI/SATA: improved performance
</li><li>GUI: keyboard fixes
</li><li>Linux installer: properly uninstall the package even if unregistering the DKMS module fails
</li><li>Linux additions: the guest screen resolution is properly restored
</li><li>Network: added support for jumbo frames (&gt; 1536 bytes)
</li><li>Shared Folders: fixed guest crash with Windows Media Player 11
</li><li>Mac OS X: Ctrl+Left mouse click doesn&#8217;t simulate a right mouse
click in the guest anymore. Use Hostkey+Left for a right mouse click
emulation. (bug <a class="new ticket" href="http://www.virtualbox.org/ticket/1766" title="ctrl key on OS X is not usable (new)">#1766</a>)
</li></ul>]]>
    </content>
</entry>

<entry>
    <title>Yacc简单介绍</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/09/yacc.html" />
    <id>tag:my.huhoo.net,2008:/study//1.685</id>

    <published>2008-09-05T07:14:21Z</published>
    <updated>2008-09-05T07:18:51Z</updated>

    <summary> 			Yacc 代表 Yet Another Compiler Compile...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="Linux世界" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="lex" label="lex" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yacc" label="yacc" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[
			<p><a href="" name="9"><span class="atitle"></span></a>Yacc 代表 Yet Another Compiler Compiler。 Yacc 的 GNU 版叫做
Bison。它是一种工具，将任何一种编程语言的所有语法翻译成针对此种语言的
Yacc 语 法解析器。它用巴科斯范式(BNF, Backus Naur
Form)来书写。按照惯例，Yacc 文件有 .y 后缀。编译行如下调用 Yacc
编译器：</p>
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       $ yacc &lt;options&gt;<br />        &lt;filename ending with .y&gt;<br /></pre></td></tr></tbody></table><br />
			<p>在进一步阐述以前，让我们复习一下什么是语法。在上一节中，我们看到
Lex 从输入序列中识别标记。
如果你在查看标记序列，你可能想在这一序列出现时执行某一动作。
这种情况下有效序列的规范称为语法。Yacc 语法文件包括这一语法规范。
它还包含了序列匹配时你想要做的事。</p>
			<p>为了更加说清这一概念，让我们以英语为例。 这一套标记可能是：名词,
动词,
形容词等等。为了使用这些标记造一个语法正确的句子，你的结构必须符合一定的规则。
一个简单的句子可能是名词+动词或者名词+动词+名词。(如 I care. See
spot run.)</p>
			<p>所以在我们这里，标记本身来自语言（Lex），并且标记序列允许用 Yacc
来指定这些标记(标记序列也叫语法)。</p> ]]>
        <![CDATA[<p>用 Yacc 来创建一个编译器包括四个步骤：</p>
			<ol><li>通过在语法文件上运行 Yacc 生成一个解析器。</li><li>说明语法：
          <ul><li>编写一个 .y 的语法文件（同时说明 C 在这里要进行的动作）。</li><li>编写一个词法分析器来处理输入并将标记传递给解析器。 这可以使用
Lex 来完成。</li><li>编写一个函数，通过调用 yyparse() 来开始解析。</li><li>编写错误处理例程（如 yyerror()）。</li></ul>
				</li><li>编译 Yacc 生成的代码以及其他相关的源文件。</li><li>将目标文件链接到适当的可执行解析器库。</li></ol>
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="" name="10"><span class="atitle">用 Yacc 编写语法</span></a></p>
			<p>
如同 Lex 一样, 一个 Yacc 程序也用双百分号分为三段。
它们是：声明、语法规则和 C 代码。 我们将解析一个格式为 姓名 = 年龄
的文件作为例子，来说明语法规则。
我们假设文件有多个姓名和年龄，它们以空格分隔。 在看 Yacc
程序的每一段时，我们将为我们的例子编写一个语法文件。</p>
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="" name="11"><span class="atitle">C 与 Yacc 的声明</span></a></p>
			<p>
C 声明可能会定义动作中使用的类型和变量，以及宏。
还可以包含头文件。每个 Yacc
声明段声明了终端符号和非终端符号（标记）的名称，还可能描述操作符优先级和针对不同符号的数据类型。
lexer (Lex) 一般返回这些标记。所有这些标记都必须在 Yacc
声明中进行说明。</p>
			<p>在文件解析的例子中我们感兴趣的是这些标记：name, equal sign, 和
age。Name 是一个完全由字符组成的值。 Age
是数字。于是声明段就会像这样：</p>
			<br /><a href="" name="N1042D"><b>文件解析例子的声明</b></a><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       %<br />        #typedef char* string; /*<br />        to specify token types as char* */<br />        #define YYSTYPE string /*<br />        a Yacc variable which has the value of returned token */<br />        %}<br />        %token NAME EQ AGE<br />        %%<br /></pre></td></tr></tbody></table><br />
			<p>你可能会觉得 YYSTYPE 有点奇怪。但是类似 Lex, Yacc
也有一套变量和函数可供用户来进行功能扩展。 YYSTYPE 定义了用来将值从
lexer 拷贝到解析器或者 Yacc 的 yylval （另一个 Yacc 变量）的类型。
默认的类型是 int。 由于字符串可以从 lexer 拷贝，类型被重定义为
char*。 关于 Yacc 变量的详细讨论，请参考 Yacc 手册（见 
        <a href="http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html#resources">资源</a>）。
      </p>
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="" name="12"><span class="atitle">Yacc 语法规则</span></a></p>
			<p>
Yacc 语法规则具有以下一般格式：</p>
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       result: components { /*<br />        action to be taken in C */ }<br />        ;<br /></pre></td></tr></tbody></table><br />
			<p>在这个例子中，result 是规则描述的非终端符号。Components
是根据规则放在一起的不同的终端和非终端符号。 如果匹配特定序列的话
Components 后面可以跟随要执行的动作。 考虑如下的例子：</p>
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       param : NAME EQ NAME {<br />        printf("\tName:%s\tValue(name):%s\n", $1,$3);}<br />            | NAME EQ VALUE{<br />            printf("\tName:%s\tValue(value):%s\n",$1,$3);}<br />        ;<br /></pre></td></tr></tbody></table><br />
			<p>如果上例中序列 NAME EQ NAME 被匹配，将执行相应的 { }
括号中的动作。 这里另一个有用的就是 $1 和 $3 的使用, 它们引用了标记
NAME 和 NAME（或者第二行的 VALUE）的值。 lexer 通过 Yacc 的变量
yylval 返回这些值。标记 NAME 的 Lex 代码是这样的：</p>
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       char [A-Za-z]<br />        name {char}+<br />        %%<br />        {name} { yylval = strdup(yytext);<br />        return NAME; }<br /></pre></td></tr></tbody></table><br />
			<p>文件解析例子的规则段是这样的：</p>
			<br /><a href="" name="N1045C"><b>文件解析的语法</b></a><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       file : record file<br />        | record<br />        ;<br />        record: NAME EQ AGE {<br />        printf("%s is now %s years old!!!", $1, $3);}<br />        ;<br />        %%<br /></pre></td></tr></tbody></table><br />
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="" name="13"><span class="atitle">附加 C 代码</span></a></p>
			<p>
现在让我们看一下语法文件的最后一段，附加 C 代码。
（这一段是可选的，如果有人想要略过它的话：）一个函数如 main() 调用
yyparse() 函数（Yacc 中 Lex 的 yylex() 等效函数）。 一般来说，Yacc
最好提供 yyerror(char msg) 函数的代码。 当解析器遇到错误时调用
yyerror(char msg)。错误消息作为参数来传递。 一个简单的 yyerror(
char* ) 可能是这样的：</p>
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       int yyerror(char* msg)<br />        {<br />        printf("Error: %s<br />        encountered at line number:%d\n", msg, yylineno);<br />        }<br /></pre></td></tr></tbody></table><br />
			<p>yylineno 提供了行数信息。</p>
			<p>这一段还包括文件解析例子的主函数：</p>
			<br /><a href="" name="N10479"><b>附加 C 代码</b></a><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       void main()<br />        {<br />            yyparse();<br />        }<br />        int yyerror(char* msg)<br />        {<br />        printf("Error: %s<br />        encountered \n", msg);<br /></pre></td></tr></tbody></table><br />
			<p>要生成代码，可能用到以下命令：</p>
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       $ yacc _d &lt;filename.y&gt;<br /></pre></td></tr></tbody></table><br />
			<p>这生成了输出文件 y.tab.h 和 y.tab.c，它们可以用 UNIX
上的任何标准 C 编译器来编译（如 gcc）。</p>
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><a href="http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html#main" class="fbox"></a><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="" name="14"><span class="atitle">命令行的其他常用选项</span></a></p>
			<ul><li>
					<i>'-d' ,'--defines'</i> :
编写额外的输出文件，它们包含这些宏定义：语法中定义的标记类型名称，语义的取值类型
          <i>YYSTYPE</i>, 以及一些外部变量声明。如果解析器输出文件名叫
'name.c', 那么 '-d' 文件就叫做 'name.h'。 如果你想将 
          <i>yylex</i>
定义放到独立的源文件中，你需要 'name.h', 因为 
          <i>yylex</i>
必须能够引用标记类型代码和 
          <i>yylval</i>变量。
        </li><li>
					<i>'-b file-prefix' ,'--file-prefix=prefix'</i> :
指定一个所有Yacc输出文件名都可以使用的前缀。选择一个名字，就如输入文件名叫
'prefix.c'.
        </li><li>
					<i>'-o outfile' ,'--output-file=outfile'</i> :
指定解析器文件的输出文件名。其他输出文件根据 '-d'
选项描述的输出文件来命名。
        </li></ul>
			<p>Yacc
库通常在编译步骤中自动被包括。但是它也能被显式的包括，以便在编译步骤中指定
        <i>�ly</i>选项。这种情况下的编译命令行是：
      </p>
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       $ cc &lt;source file<br />        names&gt; -ly<br /></pre></td></tr></tbody></table><br />
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="" name="15"><span class="atitle">将 Lex 与 Yacc 结合起来</span></a></p>
			<p>
到目前为止我们已经分别讨论了 Lex 和
Yacc。现在让我们来看一下他们是怎样结合使用的。</p>
			<p>一个程序通常在每次返回一个标记时都要调用
        <i>yylex()</i>
函数。只有在文件结束或者出现错误标记时才会终止。
      </p>
			<p>一个由 Yacc 生成的解析器调用
        <i>yylex()</i>
函数来获得标记。 
        <i>yylex()</i> 可以由 Lex
来生成或完全由自己来编写。 对于由 Lex 生成的 lexer 来说，要和 Yacc
结合使用，每当 Lex 中匹配一个模式时都必须返回一个标记。 因此 Lex
中匹配模式时的动作一般格式为：
      </p>
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       {pattern} { /* do smthg*/<br />        return TOKEN_NAME; }<br /></pre></td></tr></tbody></table><br />
			<p>于是 Yacc 就会获得返回的标记。当 Yacc 编译一个带有 _d 标记的
        <i>.y</i>文件时，会生成一个头文件，它对每个标记都有
        <i>#define</i>
的定义。 如果 Lex 和 Yacc 一起使用的话，头文件必须在相应的 Lex 文件
        <i>.lex</i>中的 C 声明段中包括。
      </p>
			<p>让我们回到名字和年龄的文件解析例子中，看一看 Lex 和 Yacc
文件的代码。</p>
			<br /><a href="" name="N104E9"><b>Name.y - 语法文件</b></a><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       %<br />        typedef char* string;<br />        #define YYSTYPE string<br />        %}<br />        %token NAME EQ AGE<br />        %%<br />        file : record file<br />        | record<br />        ;<br />        record : NAME EQ AGE {<br />        printf("%s is %s years old!!!\n", $1, $3); }<br />        ;<br />        %%<br />        int main()<br />        {<br />        yyparse();<br />        return 0;<br />        }<br />        int yyerror(char *msg)<br />        {<br />        printf("Error<br />        encountered: %s \n", msg);<br />        }<br /></pre></td></tr></tbody></table><br />
			<br />
			<br /><a href="" name="N104F5"><b>Name.lex - Lex 的解析器文件</b></a><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       %{<br />        #include "y.tab.h"<br />        <br />        #include &lt;stdio.h&gt;<br />        #include &lt;string.h&gt;<br />        extern char* yylval;<br />        %}<br />        char [A-Za-z]<br />        num [0-9]<br />        eq [=]<br />        name {char}+<br />        age {num}+<br />        %%<br />        {name} { yylval = strdup(yytext);<br />        return NAME; }<br />        {eq} { return EQ; }<br />        {age} { yylval = strdup(yytext);<br />        return AGE; }<br />        %%<br />        int yywrap()<br />        {<br />        return 1;<br />        }<br /></pre></td></tr></tbody></table><br />
			<p>作为一个参考，我们列出了
        <i>y.tab.h</i>, Yacc 生成的头文件。
      </p>
			<br /><a href="" name="N10505"><b>y.tab.h - Yacc 生成的头文件</b></a><br />
			<pre class="displaycode">       # define NAME 257<br />        # define EQ 258<br />        # define AGE 259<br /></pre>]]>
    </content>
</entry>

<entry>
    <title>Lex简单介绍</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/09/lex.html" />
    <id>tag:my.huhoo.net,2008:/study//1.684</id>

    <published>2008-09-05T07:08:29Z</published>
    <updated>2008-09-05T07:15:53Z</updated>

    <summary> Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。 这些...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="Linux世界" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="lex" label="lex" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yacc" label="yacc" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[<p>
Lex
是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。
这些词汇模式（或者常规表达式）在一种特殊的句子结构中定义，这个我们一会儿就要讨论。</p>

<p><br />
一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。<br />
当 Lex<br />
接收到文件或文本形式的输入时，它试图将文本与常规表达式进行匹配。<br />
它一次读入一个输入字符，直到找到一个匹配的模式。<br />
如果能够找到一个匹配的模式，Lex<br />
就执行相关的动作（可能包括返回一个标记）。<br />
另一方面，如果没有可以匹配的常规表达式，将会停止进一步的处理，Lex<br />
将显示一个错误消息。</p>

<p>Lex 和 C 是强耦合的。一个<br />
        <i>.lex</i> 文件（Lex 文件具有<br />
        <i>.lex</i> 的扩展名）通过 lex 公用程序来传递，并生成 C<br />
的输出文件。这些文件被编译为词法分析器的可执行版本。<br />
      </p><br />
 ]]>
        <![CDATA[<p><br /><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /><span class="atitle">Lex 的常规表达式</span></p><br /><p>
常规表达式是一种使用元语言的模式描述。表达式由符号组成。符号一般是字符和数字，但是<br />
Lex 中还有一些具有特殊含义的其他标记。 下面两个表格定义了 Lex<br />
中使用的一些标记并给出了几个典型的例子。</p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="N1005B"><span class="smalltitle">用 Lex 定义常规表达式</span></a><br />
			<br /><table border="1" cellpadding="3" cellspacing="0" width="590"><tbody><tr valign="top"><td valign="top" width="25%"><br />
							<b>字符</b><br />
						</td><td valign="top" width="75%"><br />
							<b>含义</b><br />
						</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>A-Z, 0-9, a-z</b><br />
						</td><td valign="top" width="75%">构成了部分模式的字符和数字。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>.</b><br />
						</td><td valign="top" width="75%">匹配任意字符，除了 \n。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>-</b><br />
						</td><td valign="top" width="75%">用来指定范围。例如：A-Z 指从 A 到 Z<br />
之间的所有字符。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>[ ]</b><br />
						</td><td valign="top" width="75%">一个字符集合。匹配括号内的<br />
              <i>任意</i><br />
字符。如果第一个字符是 <br />
              <b>^</b> 那么它表示否定模式。例如: [abC]<br />
匹配 a, b, 和 C中的任何一个。<br />
            </td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>*</b><br />
						</td><td valign="top" width="75%"><br />
匹配 <br />
              <i>0个</i>或者多个上述的模式。<br />
            </td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>+</b><br />
						</td><td valign="top" width="75%">匹配<br />
              <i>1个</i>或者多个上述模式。<br />
            </td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>?</b><br />
						</td><td valign="top" width="75%">匹配<br />
              <i>0个或1个</i>上述模式。<br />
            </td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>$</b><br />
						</td><td valign="top" width="75%"><br />
作为模式的最后一个字符匹配一行的结尾。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>{ }</b><br />
						</td><td valign="top" width="75%">指出一个模式可能出现的次数。 例如:<br />
A{1,3} 表示 A 可能出现1次或3次。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>\</b><br />
						</td><td valign="top" width="75%"><br />
用来转义元字符。同样用来覆盖字符在此表中定义的特殊意义，只取字符的本意。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>^</b><br />
						</td><td valign="top" width="75%">否定。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>|</b><br />
						</td><td valign="top" width="75%">表达式间的逻辑或。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>"&lt;一些符号&gt;"</b><br />
						</td><td valign="top" width="75%">字符的字面含义。元字符具有。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>/</b><br />
						</td><td valign="top" width="75%"><br />
向前匹配。如果在匹配的模版中的&#8220;/&#8221;后跟有后续表达式，只匹配模版中&#8220;/&#8221;前<br />
面的部分。如：如果输入 A01，那么在模版 A0/1 中的 A0 是匹配的。</td></tr><tr valign="top"><td valign="top" width="25%"><br />
							<b>( )</b><br />
						</td><td valign="top" width="75%">将一系列常规表达式分组。</td></tr></tbody></table><br />
			<br />
			<p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="N1018D"><span class="smalltitle">常规表达式举例</span></a></p><br />
			<br /><table border="1" cellpadding="3" cellspacing="0" width="590"><tbody><tr valign="top"><td valign="top" width="28%"><br />
							<b>常规表达式</b><br />
						</td><td valign="top" width="72%"><br />
							<b>含义</b><br />
						</td></tr><tr valign="top"><td valign="top" width="28%"><br />
joke[rs]<br />
</td><td valign="top" width="72%">匹配 jokes 或 joker。</td></tr><tr valign="top"><td valign="top" width="28%"><br />
A{1,2}shis+<br />
</td><td valign="top" width="72%">匹配 AAshis, Ashis, AAshi, Ashi。</td></tr><tr valign="top"><td valign="top" width="28%"><br />
(A[b-e])+<br />
</td><td valign="top" width="72%">匹配在 A 出现位置后跟随的从 b 到 e<br />
的所有字符中的 0 个或 1个。</td></tr></tbody></table><br />
			<br />
			<p>Lex 中的标记声明类似 C<br />
中的变量名。每个标记都有一个相关的表达式。<br />
（下表中给出了标记和表达式的例子。）<br />
使用这个表中的例子，我们就可以编一个字数统计的程序了。<br />
我们的第一个任务就是说明如何声明标记。</p><br />
			<p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="N101DE"><span class="smalltitle">标记声明举例</span></a></p><br />
			<br /><table border="1" cellpadding="3" cellspacing="0" width="590"><tbody><tr valign="top"><td valign="top" width="13%"><br />
							<b>标记</b><br />
						</td><td valign="top" width="51%"><br />
							<b>相关表达式</b><br />
						</td><td valign="top" width="36%"><br />
							<b>含义</b><br />
						</td></tr><tr valign="top"><td valign="top" width="13%">数字(number)</td><td valign="top" width="51%">([0-9])+</td><td valign="top" width="36%">1个或多个数字</td></tr><tr valign="top"><td valign="top" width="13%">字符(chars)</td><td valign="top" width="51%">[A-Za-z]</td><td valign="top" width="36%">任意字符</td></tr><tr valign="top"><td valign="top" width="13%">空格(blank)</td><td valign="top" width="51%">" "</td><td valign="top" width="36%">一个空格</td></tr><tr valign="top"><td valign="top" width="13%">字(word)</td><td valign="top" width="51%">(chars)+</td><td valign="top" width="36%">1个或多个<br />
              <i>chars</i><br />
						</td></tr><tr valign="top"><td valign="top" width="13%">变量(variable)</td><td valign="top" width="51%">(字符)+(数字)*(字符)*(数字)*</td><td valign="top" width="36%"><br /></td></tr></tbody></table><br />
			<br />
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="3"><span class="atitle">Lex 编程</span></a></p><br />
			<p>Lex 编程可以分为三步：</p><br />
			<ol><li>以 Lex 可以理解的格式指定模式相关的动作。</li><li>在这一文件上运行 Lex，生成扫描器的 C 代码。</li><li>编译和链接 C 代码，生成可执行的扫描器。</li></ol><br />
			<p>注意: 如果扫描器是用 Yacc<br />
开发的解析器的一部分，只需要进行第一步和第二步。<br />
关于这一特殊问题的帮助请阅读 <br />
        <a href="http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html#9">Yacc</a>和<br />
        <a href="http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html#15">将 Lex 和 Yacc 结合起来</a>部分。<br />
      </p><br />
			<p>现在让我们来看一看 Lex 可以理解的程序格式。一个 Lex<br />
程序分为三个段：第一段是 C 和 Lex 的全局声明，第二段包括模式（C<br />
代码），第三段是补充的 C 函数。 例如, 第三段中一般都有 main()<br />
函数。这些段以%%来分界。 那么，回到字数统计的 Lex<br />
程序，让我们看一下程序不同段的构成。</p><br />
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="4"><span class="atitle">C 和 Lex 的全局声明</span></a></p><br />
			<p><br />
这一段中我们可以增加 C<br />
变量声明。这里我们将为字数统计程序声明一个整型变量，来保存程序统计出来的字数。<br />
我们还将进行 Lex 的标记声明。</p><br />
			<br /><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="N10297"><b>字数统计程序的声明</b></a><br /><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       %{<br />        int wordCount = 0;<br />        %}<br />        chars [A-za-z\_\'\.\"]<br />        numbers ([0-9])+<br />        delim [" "\n\t]<br />        whitespace {delim}+<br />        words {chars}+<br />        %%<br /></pre></td></tr></tbody></table><br /><br />
			<p>两个百分号标记指出了 Lex<br />
程序中这一段的结束和三段中第二段的开始。</p><br />
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0" height="16" width="16"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="5"><span class="atitle">Lex 的模式匹配规则</span></a></p><br />
			<p><br />
让我们看一下 Lex 描述我们所要匹配的标记的规则。（我们将使用 C<br />
来定义标记匹配后的动作。）<br />
继续看我们的字数统计程序，下面是标记匹配的规则。</p><br />
			<br /><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="N102AD"><b>字数统计程序中的 Lex 规则</b></a><br /><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       {words} { wordCount++; /*<br />        increase the word count by one*/ }<br />        {whitespace} { /* do<br />        nothing*/ }<br />        {numbers} { /* one may<br />        want to add some processing here*/ }<br />        %%<br /></pre></td></tr></tbody></table><br /><br />
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="6"><span class="atitle">C 代码</span></a></p><br />
			<p><br />
Lex 编程的第三段，也就是最后一段覆盖了 C<br />
的函数声明（有时是主函数）。注意这一段必须包括 yywrap() 函数。 Lex<br />
有一套可供使用的函数和变量。 其中之一就是 yywrap。<br />
一般来说，yywrap() 的定义如下例。我们将在 <br />
        <a href="http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html#8">高级 Lex</a><br />
中探讨这一问题。<br />
      </p><br />
			<br /><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="N102C4"><b>字数统计程序的 C 代码段</b></a><br /><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">       void main()<br />        {<br />        yylex(); /* start the<br />        analysis*/<br />        printf(" No of words:<br />        %d\n", wordCount);<br />        }<br />        int yywrap()<br />        {<br />        return 1;<br />        }<br /></pre></td></tr></tbody></table><br /><br />
			<p>上一节我们讨论了 Lex<br />
编程的基本元素，它将帮助你编写简单的词法分析程序。 在 <br />
        <a href="http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html#8">高级 Lex</a> 这一节中我们将讨论 Lex<br />
提供的函数，这样你就能编写更加复杂的程序了。<br />
      </p><br />
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="7"><span class="atitle">将它们全部结合起来</span></a></p><br />
			<p><br />
				<i>.lex</i>文件是 Lex 的扫描器。它在 Lex 程序中如下表示：<br />
      </p><br />
			<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td class="code-outline"><pre class="displaycode">   $ lex &lt;file name.lex&gt;<br /></pre></td></tr></tbody></table><br /><br />
			<p>这生成了 lex.yy.c 文件，它可以用 C<br />
编译器来进行编译。它还可以用解析器来生成可执行程序，或者在链接步骤中通过选项<br />
�ll 包含 Lex 库。</p><br />
			<p>这里是一些 Lex 的标志：<br />
</p><br />
			<ul><li><br />
					<i>-c</i>表示 C 动作，它是缺省的。<br />
        </li><li><br />
					<i>-t</i>写入 lex.yy.c 程序来代替标准输出。<br />
        </li><li><br />
					<i>-v</i>提供一个两行的统计汇总。<br />
        </li><li><br />
					<i>-n</i>不打印 -v 的汇总。<br />
        </li></ul><br />
			<br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" height="1" width="100%" /><br /><img alt="" src="http://www.ibm.com/i/c.gif" border="0" height="6" width="8" /></td></tr></tbody></table><table class="no-print" align="right" cellpadding="0" cellspacing="0"><tbody><tr align="right"><td><img src="http://www.ibm.com/i/c.gif" alt="" height="4" width="100%" /><br /><table border="0" cellpadding="0" cellspacing="0" height="17" width="42"><tbody><tr><td valign="middle"><br /></td><td align="right" valign="top"><br /></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="8"><span class="atitle">高级 Lex</span></a></p><br />
			<p><br />
Lex<br />
有几个函数和变量提供了不同的信息，可以用来编译实现复杂函数的程序。<br />
下表中列出了一些变量和函数，以及它们的使用。 详尽的列表请参考 Lex<br />
或 Flex 手册（见后文的 <br />
        <a href="http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html#resources">资源</a>）。<br />
      </p><br />
			<p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="N10313"><span class="smalltitle">Lex 变量</span></a></p><br />
			<p><br />
				</p><table border="1" cellpadding="3" cellspacing="0" width="590"><tbody><tr valign="top"><td valign="top" width="25%">yyin</td><td valign="top" width="75%">FILE* 类型。 它指向 lexer<br />
正在解析的当前文件。</td></tr><tr valign="top"><td valign="top" width="25%">yyout</td><td valign="top" width="75%">FILE* 类型。 它指向记录 lexer<br />
输出的位置。 缺省情况下，yyin 和 yyout 都指向标准输入和输出。</td></tr><tr valign="top"><td valign="top" width="25%">yytext</td><td valign="top" width="75%"><br />
匹配模式的文本存储在这一变量中（char*）。</td></tr><tr valign="top"><td valign="top" width="25%">yyleng</td><td valign="top" width="75%">给出匹配模式的长度。</td></tr><tr valign="top"><td valign="top" width="25%">yylineno</td><td valign="top" width="75%">提供当前的行数信息。<br />
（lexer不一定支持。）</td></tr></tbody></table><br />
			<br />
			<p><a href="http://my.huhoo.net/mt-static/html/editor-content.html?cs=UTF-8" name="N10369"><span class="smalltitle">Lex 函数</span></a></p><br />
			<p><br />
				</p><table border="1" cellpadding="3" cellspacing="0" width="590"><tbody><tr valign="top"><td valign="top" width="25%">yylex()</td><td valign="top" width="75%">这一函数开始分析。 它由 Lex<br />
自动生成。</td></tr><tr valign="top"><td valign="top" width="25%">yywrap()</td><td valign="top" width="75%">这一函数在文件（或输入）的末尾调用。<br />
如果函数的返回值是1，就停止解析。 因此它可以用来解析多个文件。<br />
代码可以写在第三段，这就能够解析多个文件。 方法是使用 yyin<br />
文件指针（见上表）指向不同的文件，直到所有的文件都被解析。<br />
最后，yywrap() 可以返回 1 来表示解析的结束。</td></tr><tr valign="top"><td valign="top" width="25%">yyless(int n)</td><td valign="top" width="75%">这一函数可以用来送回除了前�n?<br />
个字符外的所有读出标记。</td></tr><tr valign="top"><td valign="top" width="25%">yymore()</td><td valign="top" width="75%">这一函数告诉 Lexer<br />
将下一个标记附加到当前标记后。</td></tr></tbody></table><br />
			<br />
			对 Lex 的讨论就到这里。]]>
    </content>
</entry>

<entry>
    <title>翻译经验总结</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/08/post_23.html" />
    <id>tag:my.huhoo.net,2008:/study//1.659</id>

    <published>2008-08-28T06:59:47Z</published>
    <updated>2008-08-28T07:01:09Z</updated>

    <summary>                         在作了些翻译和审校的工作之后，...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="杂苑笔记" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="翻译" label="翻译" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[<!-- start content -->
                        <p>在作了些翻译和审校的工作之后，有些想法和体会，在这里列举出来，不恰当的，不完整的，大家可以来补充或者修订，讨论。也希望可以有翻译方面的专家提供建议和处理方法。
</p><p>稍后补充详细的例子。
</p><p><b>相关连接</b>
</p>
<ul><li> <a href="http://www.fy-google.com/zcfg/showinfo.asp?newsid=134" class="external text" title="http://www.fy-google.com/zcfg/showinfo.asp?newsid=134" rel="nofollow">对汉学论著翻译规范的探讨</a>
</li><li> <a href="http://www.fy-google.com/zcfg/showinfo.asp?newsid=142" class="external text" title="http://www.fy-google.com/zcfg/showinfo.asp?newsid=142" rel="nofollow">漫谈计算机图书翻译的四种境界</a>
</li></ul>
<p>根据云巅工作室的运作经验，进行译员间的自校、他校，最后进行统稿是一种行之有效的质量保证措施。
</p><br />
 ]]>
        <![CDATA[<p><b>翻译术语</b>
</p>
<ul><li> <a href="http://wiki.perlchina.org/index.php/%E7%BF%BB%E8%AF%91%E6%9C%AF%E8%AF%AD" title="翻译术语">翻译术语</a> 常见的perl或计算机专用单词的翻译和解释。欢迎大家更新。
</li><li> <a href="http://wiki.w3china.org/wiki/index.php/Terminology" class="external text" title="http://wiki.w3china.org/wiki/index.php/Terminology" rel="nofollow">w3china.org 的翻译术语</a>
</li></ul>
<p><b>被动句的处理</b>
英语中的被动句很多，而我们一般不用这种被动句式讲话。所以一般的处理方法，就是变为主动句式。有些解决办法：
</p>
<ul><li> 显式的被动句改为隐式被动
</li></ul>
<p>先来看英文原句：
</p>
<pre>Making sure that newcomers are welcome can be a bit trickier. </pre>
<p>请先试着不要看下文，自己翻译一下看看。接着看第一次的译文：
</p>
<pre>确认新来的人会被欢迎到是要有点技巧的。</pre>
<p>make sure 是&#8220;确定，确信&#8221;的意思，are welcome 就是被动式的了，&#8220;被欢迎&#8221;的意思，直接照着句面翻过来就是上面的样子了。不过读起来好像有些不习惯，于是我试着改为下面的译文：
</p>
<pre>确保新来的人受到欢迎，倒是要有些技巧的。</pre>
<p>改用了&#8220;确保&#8221;一词，并把&#8220;会被欢迎到&#8221;改为&#8220;受到欢迎&#8221;，也就是把显式的被动句改为符合中文习惯的隐式被动。是不是感觉好些了？这里另外还作了两处调整，增加了逗号断句（以避免句子急促），和&#8220;倒&#8221;这个助词（调节语韵）。
</p><p><b>特长定语从句的处理</b>
</p><p>老外喜欢说一大堆的定语，直接按照句子结构翻译过来，非常罗嗦，而且拗口。有些解决办法：
</p>
<ul><li> 调整句子结构
</li></ul>
<p>先把句子中主要的结构要素拿出来。然后在后面附加一句用以交待这些定语。
</p>
<ul><li> 使用括号，把定语放在其中
</li></ul>
<p>用括号的好处就是，一眼就可以看穿句子的结构，哪怕你的定语再长我都不怕。而且又不破坏行文的流畅。
</p>
<ul><li> 使用逗号，分解句子
</li></ul>
<p>很长的话可以分解为各个短小的片断，读的人便会顺着停顿一下，也就不会那么累了。所以定语过长的时候，也可以如此断句处理。
</p><p><b>最痛快的处理方式</b>
</p><p>很多英文句子怎么翻怎么拗口，不知道在放些什么屁。最绝的，最痛快的，读明白它的原意后，直接按照自己理解的，用中文换种角度写出来。这大
约属于意译的范畴了。或者，如果这句话本来就对文章结构或者主旨无足轻重，干脆删掉不译。当然不建议滥用这种方式，不过适当的作些让步，也是不错的选择。 <br /></p><p><br /></p><h3 id="siteSub"><font style="font-size: 0.8em;">取自 PerlChina.org</font></h3>]]>
    </content>
</entry>

<entry>
    <title>ASC 安吉之游记</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/08/asc.html" />
    <id>tag:my.huhoo.net,2008:/study//1.647</id>

    <published>2008-08-24T04:38:54Z</published>
    <updated>2008-08-24T06:04:03Z</updated>

    <summary> 好不容易能有部门outing的机会，北京那边的ASC同事在三个月之前就outi...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="cnangel手记" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="杂苑笔记" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://my.huhoo.net/archives/upload/%E7%85%A7%E7%89%87%20085.jpg"><img alt="照片 085.jpg" src="http://my.huhoo.net/archives/assets_c/2008/08/%E7%85%A7%E7%89%87%20085-thumb-300x225.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="225" width="300" /></a></span> <div>好不容易能有部门outing的机会，北京那边的ASC同事在三个月之前就outing过了，而这次北京的同事又能happy，命乎，运乎？<br />8月22日，我们去了安吉的一个小镇进行漂流，第一次漂流感觉还是不错的，活动下来，很少有人的衣服是全干的。<br />8月23日，我们去了竹子博物馆，里面又像一个植物园，又像一个动物园，除了有千奇百怪的竹子，还有扬子鳄、各种各样的鹦鹉表演，最有趣的是能识别10元钱的那个小鹦鹉，把游客们手中的钱用嘴衔住，放到驯养人的面前。<br /></div>]]>
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://my.huhoo.net/archives/upload/%E7%85%A7%E7%89%87%20156.jpg"><img alt="照片 156.jpg" src="http://my.huhoo.net/archives/assets_c/2008/08/%E7%85%A7%E7%89%87%20156-thumb-400x300.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="300" width="400" /></a></span><div>竹林里面还有扬州八怪的石头像，亲爱的读者，你能从这幅图当中找到扬州八怪么？<br /><br />感觉我的家乡湖南，竹子虽然很多，从小也认识很多的竹子，但是这次的展览让我长了不少的见识，像金枝玉叶、金镶玉这种名贵的竹类品种也能一饱眼福。<br /><br />在竹博园的展馆里面，还有一幅奇妙的图画，有心的读者，能从下面的图画中读出什么来么？<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://my.huhoo.net/archives/upload/%E7%85%A7%E7%89%87%20037.jpg"><img alt="照片 037.jpg" src="http://my.huhoo.net/archives/assets_c/2008/08/%E7%85%A7%E7%89%87%20037-thumb-300x400.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="400" width="300" /></a></span>原来这首诗和这幅画中的竹叶是一一对应的。 :)<br /></div><div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />下午去了天下银坑，传说这里是宋朝时代的一个银矿。在天下银坑里面满山的竹子，其中我们还到了夜宴、霸王别姬、越王勾践的一些摄影场地。可以看看电影是如何制作的吧！<br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://my.huhoo.net/archives/upload/%E7%85%A7%E7%89%87%20033.jpg"><img alt="照片 033.jpg" src="http://my.huhoo.net/archives/assets_c/2008/08/%E7%85%A7%E7%89%87%20033-thumb-300x225.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="225" width="300" /></a></span><br /></div><div>大家还熟悉《夜宴》片景里面的这个镜头吧？<br /><br /><br /><br /><br /><br /><br /><br /><br />走了进来，一切还是那样简陋，不知道哪些技术高超的摄影师们是怎么渲染出夜宴场景的?<br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://my.huhoo.net/archives/upload/%E7%85%A7%E7%89%87%20151.jpg"><img alt="照片 151.jpg" src="http://my.huhoo.net/archives/assets_c/2008/08/%E7%85%A7%E7%89%87%20151-thumb-300x400.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="400" width="300" /></a></span><br /></div><div><br />行程在天下银坑终于结束了，这次团队的活动还是比较high的。<br /></div>]]>
    </content>
</entry>

<entry>
    <title>今天竟然遇到我的高中同学了</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/08/post_22.html" />
    <id>tag:my.huhoo.net,2008:/study//1.641</id>

    <published>2008-08-22T01:06:28Z</published>
    <updated>2008-08-24T04:27:32Z</updated>

    <summary>李祥，高中的一位同学，竟然也在阿里巴巴工作。想起高中时的老友，不知道他们生活可好...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="cnangel手记" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="杂苑笔记" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[李祥，高中的一位同学，竟然也在阿里巴巴工作。想起高中时的老友，不知道他们生活可好？<br />有的去了军队，有的估计已经出国留学，杳无音讯。只有我还在一家公司挣扎着，不知道前途是好还是坏？<br /><br /><br /> ]]>
        <![CDATA[当初从国企出来就面临了一次选择，我不是很后悔，毕竟目前的工作与我的兴趣差不多吻合。目前所在自然语言处理小组，感觉处境很微妙，也许just a joke。&nbsp; :)<br />]]>
    </content>
</entry>

<entry>
    <title>使用和制作patch文件</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/08/patch.html" />
    <id>tag:my.huhoo.net,2008:/study//1.636</id>

    <published>2008-08-21T05:52:53Z</published>
    <updated>2008-08-21T06:09:26Z</updated>

    <summary>对于进行修改文件比较差异，很快的创建一个补丁文件(patch)，到底怎么做呢？下...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="Linux世界" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="patch" label="patch" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        对于进行修改文件比较差异，很快的创建一个补丁文件(patch)，到底怎么做呢？下面将为读者讲述一下：如何创建和使用补丁文件以及牵涉到patch文件的结构的一些详细说明。
        <![CDATA[一、创建补丁文件<br />&lt;blockquote&gt;<br />diff -Naur 旧的目录 新的目录 &gt; patch文件&lt;/blockquote&gt;<br />或者<br />&lt;blockquote&gt;diff -Naur 旧的文件 新的文件 &gt; patch文件&lt;/blockquote&gt;<br />对于目录层数的一些限制，在创建patch的时候文件夹的层数应当是一样的，比如<br />&lt;blockquote&gt;<br />--- old/lib/TWiki Aug 17 11:03:56 2008<br />+++ new/lib/TWiki Aug 19 20:05:41 2008<br />&lt;/blockquote&gt;<br />这样是可以的，而<br />&lt;blockquote&gt;<br />--- old/other/lib/TWiki Aug 17 11:03:56 2008<br />+++ new/lib/TWiki Aug 19 20:05:41 2008<br />&lt;/blockquote&gt;<br />这样做可能会有一些问题。<br /><br />二、如何使用patch<br />1,对于一个patch文件，有两种常用使用方法：<br />&lt;blockquote&gt;cat new-patch | patch -p02.&lt;/blockquote&gt;<br />和<br />&lt;blockquote&gt;patch -p0 &lt; new-patch&lt;/blockquote&gt;<br />2,patch命令里面的层数(-p0?-p1?)<br />参数-p来指定从第几层开始比较。比如有一个patch文件的补丁头是这样的：<br />&lt;blockquote&gt;<br />--- old/lib/TWiki Aug 17 11:03:56 2008<br />+++ new/lib/TWiki Aug 19 20:05:41 2008<br />&lt;/blockquote&gt;<br />如果使用参数-p0，就表示从当前目录，找一个叫作new的目录，在它下面找一个叫lib的目录，再在它下面找一个叫TWiki的目录。<br />如果使用参数-p1,就表示忽略第一层，从当前目录找一个叫lib的目录，在它下面找一个叫TWiki的目录。这样会忽略掉补丁头提到的new目录。<br />依此类推。<br /><br />三、patch文件的结构<br />1,补丁头<br />补丁头是分别由---/+++开头的两行，用来表示要打补丁的文件。<br />一个补丁文件中的多个补丁<br />一个补丁文件中可能包含以---/+++开头的很多节，每一节用来打一个补丁。所以在一个补丁文件中可以包含好多个补丁。<br />2,块<br />块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。他们只是用来表示要修改的位置。他们通常以@@开始，结束于另一个块的开始或者一个新的补丁头。<br />3,块的缩进<br />块会缩进一列，而这一列是用来表示这一行是要增加还是要删除的。<br />4,块的第一列<br />+号表示这一行是要加上的。<br />-号表示这一行是要删除的。<br />没有加号也没有减号表示这里只是引用的而不需要修改。<br /><br />]]>
    </content>
</entry>

<entry>
    <title>修正Twiki4.2.2的一个Bug</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/08/twiki422bug.html" />
    <id>tag:my.huhoo.net,2008:/study//1.625</id>

    <published>2008-08-15T07:37:21Z</published>
    <updated>2008-08-20T08:27:57Z</updated>

    <summary>美国yahoo内部人员文档交流使用的的twiki页面是twiki页面，但是twi...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="我和Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="firefox" label="firefox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ie" label="ie" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="twiki" label="twiki" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="urlencode" label="urlencode" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yahoo" label="yahoo" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[美国yahoo内部人员文档交流使用的的twiki页面是twiki页面，但是twiki对UTF-8汉字处理不太好，导致一些莫名其妙的问题，如字体从上到下，越来越大。为了解决这个症状，本人跟踪了一下这个原因，应该是twiki的一个bug。<br /><br />我们知道在firefox里面字体url转码和不转码是没有什么区别的，但是在ie6下必须要url转码，否则ie6就会成为乱码，(ie7正常)于是：<br />1，修改TWiki/Render.pm文件：<br />找到函数：<br /><blockquote>sub makeAnchorName {<br /></blockquote>在函数末尾修改返回值为：<br /><blockquote>return urlEncode($anchorName);<br /></blockquote><br />接着在该函数后面加上函数urlEncode：<br /><br /><blockquote>sub urlEncode {<br />&nbsp;&nbsp;&nbsp; my $text = shift;<br />&nbsp;&nbsp;&nbsp; $text =~ s/([^0-9a-zA-Z-_.:~!*'\/%])/'%'.sprintf('%02x',ord($1))/ge;<br />&nbsp;&nbsp;&nbsp; return $text;<br />}<br /></blockquote><br />2，修改TWiki.pm文件：<br />找到函数：<br /><blockquote>sub _make_params {<br /></blockquote>修改：<br /><blockquote>$anchor .= '#' . shift( @args );<br /></blockquote>为<br /><blockquote>$anchor .= '#' . urlEncode(shift( @args ));<br /></blockquote>即可。<br /><br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>PHP 4官方支持结束</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/08/php_4.html" />
    <id>tag:my.huhoo.net,2008:/study//1.618</id>

    <published>2008-08-12T11:57:21Z</published>
    <updated>2008-08-12T11:58:33Z</updated>

    <summary>自2000年5月22日发布正式稳定版8年之后，8月8日标志着PHP 4生命的终结...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="我和PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[自2000年5月22日发布正式稳定版8年之后，8月8日标志着PHP 4生命的终结，官方不再提供支持，不会再有安全补丁发布。<br /><br />PHP 4.4.9是PHP 4.x的最后一个版本。管理员和开发者失去了最后一个不升级到新一代版本开发环境的理由。过去几年，PHP 5提供了多种升级的途径，它的最新版本是5.2.6。但PHP 4发布8年之后，仍然有相当多的系统将不会在未来迁移到PHP 5，其中有相当的一部分可能永远也不会升级到PHP 5。对于那些不升级到新版PHP的用户，PHP专家 Stefan Esser将通过Suhosin 项目继续为PHP 4.x系列提供第三方安全补丁。<br />]]>
        
    </content>
</entry>

<entry>
    <title>Python Standard Library </title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/08/python_standard_library.html" />
    <id>tag:my.huhoo.net,2008:/study//1.617</id>

    <published>2008-08-11T13:13:44Z</published>
    <updated>2008-08-11T13:42:43Z</updated>

    <summary> Python 2.0发布附带了一个包含200个以上模块的可扩展的标准库。 Py...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="Linux世界" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="library" label="Library" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[<p>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline">Python 2.0发布附带了一个包含200个以上模块的可扩展的标准库。</span>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline"></span></p>
<p>
<p>
<p>
<p>
<span class="mt-enclosure mt-enclosure-file" style="DISPLAY: inline"><a href="http://my.huhoo.net/archives/upload/PythonStandardLib.zh_cn.t2t.src.zip">PythonStandardLib.zh_cn.t2t.src.zip</a></span></p>
<p></p>
<p></p>
<p></p>]]>
        <![CDATA[<h1 id="head-d9598057745a245d94334b18ee46377f4b8bd3d1">前言</h1><span class="anchor" id="line-34"></span>
<p class="line867">
<h2 id="head-8ab40e9fe4d7caab91ed421e94c790c051fa7c9d">0.1. 关于本书</h2><span class="anchor" id="line-35"></span>
<ul>
<li style="LIST-STYLE-TYPE: none">"Those people who have nothing better to do than post on the Internet <span class="anchor" id="line-36"></span>all day long are rarely the ones who have the most insights." <span class="anchor" id="line-37"></span><span class="anchor" id="line-38"></span>- Jakob Nielsen, December 1998 <span class="anchor" id="line-39"></span><span class="anchor" id="line-40"></span></li></ul>
<p class="line874">五年前我偶然遇到了 Python, 开始了我的 Python 之旅, 我花费了大量的时间 <span class="anchor" id="line-41"></span>在 <tt><font face="Courier New">comp.lang.python</font></tt> 新闻组里回答问题. 也许某个人发现一个模块正是他想要的, <span class="anchor" id="line-42"></span>但是却不知道如何使用它. 也许某个人为他的任务挑选的不合适的模块. 也许某个人已经厌 <span class="anchor" id="line-43"></span>倦了发明新轮子. 大多时候, 一个简短的例子要比一份手册文档更有帮助. <span class="anchor" id="line-44"></span><span class="anchor" id="line-45"></span>
<p class="line874">本书是超过3,000个新闻组讨论的精华部分, 当然也有很多的新脚本, 为了涵盖标准库的每个角落. <span class="anchor" id="line-46"></span><span class="anchor" id="line-47"></span>
<p class="line874">我尽力使得每个脚本都易于理解, 易于重用代码. 我有意缩短注释的长度, 如果你想更深入地 <span class="anchor" id="line-48"></span>了解背景, 那么你可以参阅每个 Python 发布中的参考手册. 本书的重要之处在于范例代码. <span class="anchor" id="line-49"></span><span class="anchor" id="line-50"></span>
<p class="line862">我们欢迎任何评论, 建议, 以及 bug 报告, 请将它们发送到 [<a class="mailto" href="mailto:fredrik@pythonware.com">fredrik@pythonware.com</a>]. 我将阅读尽我所能阅读所有的邮件, 但可能回复不是那么及时. <span class="anchor" id="line-51"></span><span class="anchor" id="line-52"></span>
<p class="line862">本书的相关更新内容以及其他信息请访问 <a class="http" href="http://www.pythonware.com/people/fredrik/librarybook.htm">http://www.pythonware.com/people/fredrik/librarybook.htm</a> <span class="anchor" id="line-53"></span><span class="anchor" id="line-54"></span>
<p class="line867"><strong>为什么没有Tkinter?</strong> <span class="anchor" id="line-55"></span><span class="anchor" id="line-56"></span>
<p class="line874">本书涵盖了整个标准库, 除了(可选的)Tkinter ui(user-interface : 用户界面) 库. 有很多原因, <span class="anchor" id="line-57"></span>更多是因为时间, 本书的空间, 以及我正在写另一本关于 Tkinter 的书. <span class="anchor" id="line-58"></span><span class="anchor" id="line-59"></span>
<p class="line862">关于这些书的信息, 请访问 <a class="http" href="http://www.pythonware.com/people/fredrik/tkinterbook.htm">http://www.pythonware.com/people/fredrik/tkinterbook.htm</a>. (不用看了,又一404) <span class="anchor" id="line-60"></span><span class="anchor" id="line-61"></span>
<p class="line867"><strong>产品细节</strong> <span class="anchor" id="line-62"></span><span class="anchor" id="line-63"></span>
<p class="line862" dir="ltr" style="MARGIN-RIGHT: 0px">本书使用<a href="http://www.google.cn/search?q=DocBook&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">DocBook</a> SGML编写, 我使用了一系列的工具, 包括Secret Labs' <a class="nonexistent" href="http://www.google.cn/search?q=PythonWorks&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">PythonWorks</a>, <span class="anchor" id="line-64"></span>Excosoft Documentor, James Clark's Jade DSSSL processor, Norm Walsh's <a href="http://www.google.cn/search?q=DocBook&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">DocBook</a> stylesheets, <span class="anchor" id="line-65"></span>当然,还有一些 Python 脚本. <span class="anchor" id="line-66"></span><span class="anchor" id="line-67"></span>
<p class="line874">感谢帮忙校对的人们: Tim Peters, Guido van Rossum, David Ascher, Mark Lutz, 和 Rael Dornfest, <span class="anchor" id="line-68"></span>以及 <a class="nonexistent" href="http://www.google.cn/search?q=PythonWare&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">PythonWare</a> 成员: Matthew Ellis, Håkan Karlsson, 和 Rune Uhlin. <span class="anchor" id="line-69"></span><span class="anchor" id="line-70"></span>
<p class="line874">感谢 Lenny Muellner, 他帮助我把SGML文件转变为你们现在所看到的这本书, 以及Christien Shangraw, <span class="anchor" id="line-71"></span>他将那些代码文件集合起来做成了随书CD (可以在 <a class="http" href="http://examples.oreilly.com/pythonsl">http://examples.oreilly.com/pythonsl</a> 找到, <span class="anchor" id="line-72"></span>竟然没有404, 奇迹). <span class="anchor" id="line-73"></span><span class="anchor" id="line-74"></span>
<p class="line867">
<h2 id="head-68a55daf462d4843e0cd5a6c782d605284f8f9fe">0.2. 代码约定</h2><span class="anchor" id="line-75"></span>
<p class="line874">本书使用以下习惯用法: <span class="anchor" id="line-76"></span><span class="anchor" id="line-77"></span>
<p class="line867"><em>斜体</em> <span class="anchor" id="line-78"></span><span class="anchor" id="line-79"></span>
<ul>
<li style="LIST-STYLE-TYPE: none">用于文件名和命令. 还用于定义术语. <span class="anchor" id="line-80"></span><span class="anchor" id="line-81"></span></li></ul>
<p class="line867"><tt><font face="Courier New">等宽字体&nbsp;e.g.&nbsp;Python</font></tt> <span class="anchor" id="line-82"></span><span class="anchor" id="line-83"></span>
<ul>
<li style="LIST-STYLE-TYPE: none">用于代码以及方法,模块,操作符,函数,语句,属性等的名称. <span class="anchor" id="line-84"></span><span class="anchor" id="line-85"></span></li></ul>
<p class="line867"><strong><tt><font face="Courier New">等宽粗体</font></tt></strong> <span class="anchor" id="line-86"></span><span class="anchor" id="line-87"></span>
<ul>
<li style="LIST-STYLE-TYPE: none">用于代码执行结果. <span class="anchor" id="line-88"></span><span class="anchor" id="line-89"></span></li></ul>
<p class="line867">
<h2 id="head-fad3869dfdb1c0b1f316892b550f984ec5ed2705">0.3. 关于例子</h2><span class="anchor" id="line-90"></span>
<p class="line874">除非提到,所有例子都可以在 Python 1.5.2 和 Python 2.0 下运行. 能不能在 Python 2.4/2.5 下执行.....看参与翻译各位的了. <span class="anchor" id="line-91"></span><span class="anchor" id="line-92"></span>
<p class="line874">除了一些平台相关模块的脚本, 所有例子都可以在 Windows, Solaris, 以及 Linux 下正常执行. <span class="anchor" id="line-93"></span><span class="anchor" id="line-94"></span>
<p class="line874">所有代码都是有版权的. 当然,你可以自由地使用这些这些模块,别忘记你是从哪得到(?学会)这些的. <span class="anchor" id="line-95"></span><span class="anchor" id="line-96"></span>
<p class="line862">大多例子的文件名都包含它所使用的模块名称,后边是 "<tt><font face="Courier New">-example-</font></tt>" 以及一个唯一的"序号". <span class="anchor" id="line-97"></span>
<ul>
<li style="LIST-STYLE-TYPE: none">注意有些例子并不是按顺序出现的, 这是为了匹配本书的较早版本 - <span class="anchor" id="line-98"></span></li></ul>
<p class="line867"><em>(the eff-bot guide to) The Standard Python Library</em>. <span class="anchor" id="line-99"></span><span class="anchor" id="line-100"></span>
<p class="line862">你可以在网上找到本书附带CD的内容 (参阅 <a class="http" href="http://examples.oreilly.com/pythonsl">http://examples.oreilly.com/pythonsl</a>). 更多信息以及更新内容参阅 <a class="http" href="http://www.pythonware.com/people/fredrik/librarybook.htm">http://www.pythonware.com/people/fredrik/librarybook.htm</a>. (ft, 又一404. 大家一定不要看~) </p>
<p class="line862">&nbsp;</p>
<h1 id="head-7ae66233f0f864295cac4c7bb1f0abeb19d8d5f2">1. 模块索引</h1><span class="anchor" id="line-110"></span>
<ol type="1">
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E6%A0%B8%E5%BF%83%E6%A8%A1%E5%9D%97&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">核心模块</a> <span class="anchor" id="line-111"></span>
<ul>
<li>_ _builtin_ _ 模块 <span class="anchor" id="line-112"></span>
<li>exceptions 模块 <span class="anchor" id="line-113"></span>
<li>os 模块 <span class="anchor" id="line-114"></span>
<li>os.path 模块 <span class="anchor" id="line-115"></span>
<li>stat 模块 <span class="anchor" id="line-116"></span>
<li>string 模块 <span class="anchor" id="line-117"></span>
<li>re 模块 <span class="anchor" id="line-118"></span>
<li>math 模块 <span class="anchor" id="line-119"></span>
<li>cmath 模块 <span class="anchor" id="line-120"></span>
<li>operator 模块 <span class="anchor" id="line-121"></span>
<li>copy 模块 <span class="anchor" id="line-122"></span>
<li>sys 模块 <span class="anchor" id="line-123"></span>
<li>atexit 模块 <span class="anchor" id="line-124"></span>
<li>time 模块 <span class="anchor" id="line-125"></span>
<li>types 模块 <span class="anchor" id="line-126"></span>
<li>gc 模块 <span class="anchor" id="line-127"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E6%9B%B4%E5%A4%9A%E6%A0%87%E5%87%86%E6%A8%A1%E5%9D%97&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">更多标准模块</a> <span class="anchor" id="line-128"></span>
<ul>
<li>fileinput 模块 <span class="anchor" id="line-129"></span>
<li>shutil 模块 <span class="anchor" id="line-130"></span>
<li>tempfile 模块 <span class="anchor" id="line-131"></span>
<li>StringIO 模块 <span class="anchor" id="line-132"></span>
<li>cStringIO 模块 <span class="anchor" id="line-133"></span>
<li>mmap 模块 <span class="anchor" id="line-134"></span>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=UserDict&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">UserDict</a> 模块 <span class="anchor" id="line-135"></span></p>
<li>
<p class="line891"><a class="nonexistent" href="http://www.google.cn/search?q=UserList&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">UserList</a> 模块 <span class="anchor" id="line-136"></span></p>
<li>
<p class="line891"><a class="nonexistent" href="http://www.google.cn/search?q=UserString&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">UserString</a> 模块 <span class="anchor" id="line-137"></span></p>
<li>traceback 模块 <span class="anchor" id="line-138"></span>
<li>errno 模块 <span class="anchor" id="line-139"></span>
<li>getopt 模块 <span class="anchor" id="line-140"></span>
<li>getpass 模块 <span class="anchor" id="line-141"></span>
<li>glob 模块 <span class="anchor" id="line-142"></span>
<li>fnmatch 模块 <span class="anchor" id="line-143"></span>
<li>random 模块 <span class="anchor" id="line-144"></span>
<li>whrandom 模 <span class="anchor" id="line-145"></span>
<li>md5 模块 <span class="anchor" id="line-146"></span>
<li>sha 模块 <span class="anchor" id="line-147"></span>
<li>crypt 模块 <span class="anchor" id="line-148"></span>
<li>rotor 模块 <span class="anchor" id="line-149"></span>
<li>zlib 模块 <span class="anchor" id="line-150"></span>
<li>code 模块 <span class="anchor" id="line-151"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E7%BA%BF%E7%A8%8B%E5%92%8C%E8%BF%9B%E7%A8%8B&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">线程和进程</a> <span class="anchor" id="line-152"></span>
<ul>
<li>threading 模块 <span class="anchor" id="line-153"></span>
<li>Queue 模块 <span class="anchor" id="line-154"></span>
<li>thread 模块 <span class="anchor" id="line-155"></span>
<li>commands 模块 <span class="anchor" id="line-156"></span>
<li>pipes 模块 <span class="anchor" id="line-157"></span>
<li>popen2 模块 <span class="anchor" id="line-158"></span>
<li>signal 模块 <span class="anchor" id="line-159"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E6%95%B0%E6%8D%AE%E8%A1%A8%E7%A4%BA&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">数据表示</a> <span class="anchor" id="line-160"></span>
<ul>
<li>array 模块 <span class="anchor" id="line-161"></span>
<li>struct 模块 <span class="anchor" id="line-162"></span>
<li>xdrlib 模块 <span class="anchor" id="line-163"></span>
<li>marshal 模块 <span class="anchor" id="line-164"></span>
<li>pickle 模块 <span class="anchor" id="line-165"></span>
<li>cPickle 模块 <span class="anchor" id="line-166"></span>
<li>copy_reg 模块 <span class="anchor" id="line-167"></span>
<li>pprint 模块 <span class="anchor" id="line-168"></span>
<li>repr 模块 <span class="anchor" id="line-169"></span>
<li>base64 模块 <span class="anchor" id="line-170"></span>
<li>binhex 模块 <span class="anchor" id="line-171"></span>
<li>quopri 模块 <span class="anchor" id="line-172"></span>
<li>uu 模块 <span class="anchor" id="line-173"></span>
<li>binascii 模块 <span class="anchor" id="line-174"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">文件格式</a> <span class="anchor" id="line-175"></span>
<ul>
<li>xmllib 模块 <span class="anchor" id="line-176"></span>
<li>xml.parsers.expat 模块 <span class="anchor" id="line-177"></span>
<li>sgmllib 模块 <span class="anchor" id="line-178"></span>
<li>htmllib 模块 <span class="anchor" id="line-179"></span>
<li>htmlentitydefs 模块 <span class="anchor" id="line-180"></span>
<li>formatter 模块 <span class="anchor" id="line-181"></span>
<li>
<p class="line891"><a class="nonexistent" href="http://www.google.cn/search?q=ConfigParser&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">ConfigParser</a> 模块 <span class="anchor" id="line-182"></span></p>
<li>netrc 模块 <span class="anchor" id="line-183"></span>
<li>shlex 模块 <span class="anchor" id="line-184"></span>
<li>zipfile 模块 <span class="anchor" id="line-185"></span>
<li>gzip 模块 <span class="anchor" id="line-186"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E9%82%AE%E4%BB%B6%E5%92%8C%E6%96%B0%E9%97%BB%E6%B6%88%E6%81%AF%E5%A4%84%E7%90%86&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">邮件和新闻消息处理</a> <span class="anchor" id="line-187"></span>
<ul>
<li>rfc822 模块 <span class="anchor" id="line-188"></span>
<li>mimetools 模块 <span class="anchor" id="line-189"></span>
<li>
<p class="line891"><a class="nonexistent" href="http://www.google.cn/search?q=MimeWriter&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">MimeWriter</a> 模块 <span class="anchor" id="line-190"></span></p>
<li>mailbox 模块 <span class="anchor" id="line-191"></span>
<li>mailcap 模块 <span class="anchor" id="line-192"></span>
<li>mimetypes 模块 <span class="anchor" id="line-193"></span>
<li>packmail 模块 <span class="anchor" id="line-194"></span>
<li>mimify 模块 <span class="anchor" id="line-195"></span>
<li>multifile 模块 <span class="anchor" id="line-196"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">网络协议</a> <span class="anchor" id="line-197"></span>
<ul>
<li>socket 模块 <span class="anchor" id="line-198"></span>
<li>select 模块 <span class="anchor" id="line-199"></span>
<li>asyncore 模块 <span class="anchor" id="line-200"></span>
<li>asynchat 模块 <span class="anchor" id="line-201"></span>
<li>urllib 模块 <span class="anchor" id="line-202"></span>
<li>urlparse 模块 <span class="anchor" id="line-203"></span>
<li>cookie 模块 <span class="anchor" id="line-204"></span>
<li>robotparser 模块 <span class="anchor" id="line-205"></span>
<li>ftplib 模块 <span class="anchor" id="line-206"></span>
<li>gopherlib 模块 <span class="anchor" id="line-207"></span>
<li>httplib 模块 <span class="anchor" id="line-208"></span>
<li>poplib 模块 <span class="anchor" id="line-209"></span>
<li>imaplib 模块 <span class="anchor" id="line-210"></span>
<li>smtplib 模块 <span class="anchor" id="line-211"></span>
<li>telnetlib 模块 <span class="anchor" id="line-212"></span>
<li>nntplib 模块 <span class="anchor" id="line-213"></span>
<li>
<p class="line891"><a class="nonexistent" href="http://www.google.cn/search?q=SocketServer&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">SocketServer</a> 模块 <span class="anchor" id="line-214"></span></p>
<li>BaseHTTPServer 模块 <span class="anchor" id="line-215"></span>
<li>SimpleHTTPServer 模块 <span class="anchor" id="line-216"></span>
<li>CGIHTTPServer 模块 <span class="anchor" id="line-217"></span>
<li>cgi 模块webbrowser 模块 <span class="anchor" id="line-218"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E5%9B%BD%E9%99%85%E5%8C%96&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">国际化</a> <span class="anchor" id="line-219"></span>
<ul>
<li>locale 模块 <span class="anchor" id="line-220"></span>
<li>unicodedata 模块 <span class="anchor" id="line-221"></span>
<li>ucnhash 模块 <span class="anchor" id="line-222"></span></li></ul>
<li>
<p class="line891"><a class="nonexistent" href="http://www.google.cn/search?q=%E5%A4%9A%E5%AA%92%E4%BD%93%E7%9B%B8%E5%85%B3%E6%A8%A1%E5%9D%97&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">多媒体相关模块</a> <span class="anchor" id="line-223"></span>
<ul>
<li>imghdr 模块 <span class="anchor" id="line-224"></span>
<li>sndhdr 模块 <span class="anchor" id="line-225"></span>
<li>whatsound 模块 <span class="anchor" id="line-226"></span>
<li>aifc 模块 <span class="anchor" id="line-227"></span>
<li>sunau 模块 <span class="anchor" id="line-228"></span>
<li>sunaudio 模块 <span class="anchor" id="line-229"></span>
<li>wave 模块 <span class="anchor" id="line-230"></span>
<li>audiodev 模块 <span class="anchor" id="line-231"></span>
<li>winsound 模块 <span class="anchor" id="line-232"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E6%95%B0%E6%8D%AE%E5%82%A8%E5%AD%98&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">数据储存</a> <span class="anchor" id="line-233"></span>
<ul>
<li>anydbm 模块 <span class="anchor" id="line-234"></span>
<li>whichdb 模块 <span class="anchor" id="line-235"></span>
<li>shelve 模块 <span class="anchor" id="line-236"></span>
<li>dbhash 模块 <span class="anchor" id="line-237"></span>
<li>dbm 模块 <span class="anchor" id="line-238"></span>
<li>dumbdbm 模块 <span class="anchor" id="line-239"></span>
<li>gdbm 模块 <span class="anchor" id="line-240"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E5%B7%A5%E5%85%B7%E5%92%8C%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">工具和实用程序</a> <span class="anchor" id="line-241"></span>
<ul>
<li>dis 模块 <span class="anchor" id="line-242"></span>
<li>pdb 模块 <span class="anchor" id="line-243"></span>
<li>bdb 模块 <span class="anchor" id="line-244"></span>
<li>profile 模块 <span class="anchor" id="line-245"></span>
<li>pstats 模块 <span class="anchor" id="line-246"></span>
<li>tabnanny 模块 <span class="anchor" id="line-247"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E5%85%B6%E4%BB%96%E6%A8%A1%E5%9D%97&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">其他模块</a> <span class="anchor" id="line-248"></span>
<ul>
<li>fcntl 模块 <span class="anchor" id="line-249"></span>
<li>pwd 模块 <span class="anchor" id="line-250"></span>
<li>grp 模块 <span class="anchor" id="line-251"></span>
<li>nis 模块 <span class="anchor" id="line-252"></span>
<li>curses 模块 <span class="anchor" id="line-253"></span>
<li>termios 模块 <span class="anchor" id="line-254"></span>
<li>tty 模块 <span class="anchor" id="line-255"></span>
<li>resource 模块 <span class="anchor" id="line-256"></span>
<li>syslog 模块 <span class="anchor" id="line-257"></span>
<li>msvcrt 模块 <span class="anchor" id="line-258"></span>
<li>nt 模块 <span class="anchor" id="line-259"></span>
<li>_winreg 模块 <span class="anchor" id="line-260"></span>
<li>posix 模块 <span class="anchor" id="line-261"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E6%89%A7%E8%A1%8C%E6%94%AF%E6%8C%81%E6%A8%A1%E5%9D%97&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">执行支持模块</a> <span class="anchor" id="line-262"></span>
<ul>
<li>dospath 模块 <span class="anchor" id="line-263"></span>
<li>macpath 模块 <span class="anchor" id="line-264"></span>
<li>ntpath 模块 <span class="anchor" id="line-265"></span>
<li>posixpath 模块 <span class="anchor" id="line-266"></span>
<li>strop 模块 <span class="anchor" id="line-267"></span>
<li>imp 模块 <span class="anchor" id="line-268"></span>
<li>new 模块 <span class="anchor" id="line-269"></span>
<li>pre 模块 <span class="anchor" id="line-270"></span>
<li>sre 模块 <span class="anchor" id="line-271"></span>
<li>py_compile 模块 <span class="anchor" id="line-272"></span>
<li>compileall 模块 <span class="anchor" id="line-273"></span>
<li>ihooks 模块 <span class="anchor" id="line-274"></span>
<li>linecache 模块 <span class="anchor" id="line-275"></span>
<li>macurl2path 模块 <span class="anchor" id="line-276"></span>
<li>nturl2path 模块 <span class="anchor" id="line-277"></span>
<li>tokenize 模块 <span class="anchor" id="line-278"></span>
<li>keyword 模块 <span class="anchor" id="line-279"></span>
<li>parser 模块 <span class="anchor" id="line-280"></span>
<li>symbol 模块 <span class="anchor" id="line-281"></span>
<li>token 模块 <span class="anchor" id="line-282"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=%E5%85%B6%E4%BB%96%E6%A8%A1%E5%9D%97&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">其他模块</a> <span class="anchor" id="line-283"></span>
<ul>
<li>pyclbr 模块 <span class="anchor" id="line-284"></span>
<li>filecmp 模块 <span class="anchor" id="line-285"></span>
<li>cmd 模块 <span class="anchor" id="line-286"></span>
<li>rexec 模块 <span class="anchor" id="line-287"></span>
<li>Bastion 模块 <span class="anchor" id="line-288"></span>
<li>readline 模块 <span class="anchor" id="line-289"></span>
<li>rlcompleter 模块 <span class="anchor" id="line-290"></span>
<li>statvfs 模块 <span class="anchor" id="line-291"></span>
<li>calendar 模块 <span class="anchor" id="line-292"></span>
<li>sched 模块 <span class="anchor" id="line-293"></span>
<li>statcache 模块 <span class="anchor" id="line-294"></span>
<li>grep 模块 <span class="anchor" id="line-295"></span>
<li>dircache 模块 <span class="anchor" id="line-296"></span>
<li>dircmp 模块 <span class="anchor" id="line-297"></span>
<li>cmp 模块 <span class="anchor" id="line-298"></span>
<li>cmpcache 模块 <span class="anchor" id="line-299"></span>
<li>util 模块 <span class="anchor" id="line-300"></span>
<li>soundex 模块 <span class="anchor" id="line-301"></span>
<li>timing 模块 <span class="anchor" id="line-302"></span>
<li>posixfile 模块 <span class="anchor" id="line-303"></span>
<li>bisect 模块 <span class="anchor" id="line-304"></span>
<li>knee 模块 <span class="anchor" id="line-305"></span>
<li>tzparse 模块 <span class="anchor" id="line-306"></span>
<li>regex 模块 <span class="anchor" id="line-307"></span>
<li>regsub 模块 <span class="anchor" id="line-308"></span>
<li>reconvert 模块 <span class="anchor" id="line-309"></span>
<li>regex_syntax 模块 <span class="anchor" id="line-310"></span>
<li>find 模块 <span class="anchor" id="line-311"></span></li></ul>
<li>
<p class="line891"><a href="http://www.google.cn/search?q=Py2.0%E5%90%8E%E6%96%B0%E5%A2%9E%E6%A8%A1%E5%9D%97&amp;sa=%E6%90%9C%E7%B4%A2&amp;client=pub-4289280245558859&amp;forid=1&amp;prog=aff&amp;ie=utf-8&amp;oe=utf-8&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1&amp;hl=zh-CN">Py2.0后新增模块</a> <span class="anchor" id="line-312"></span>
<ul>
<li>更新中</li></ul></li></ol><span class="anchor" id="line-101"></span><span class="anchor" id="line-102"></span>]]>
    </content>
</entry>

<entry>
    <title>Olympic in Beijing</title>
    <link rel="alternate" type="text/html" href="http://my.huhoo.net/archives/2008/08/olympic_in_beijing.html" />
    <id>tag:my.huhoo.net,2008:/study//1.616</id>

    <published>2008-08-08T08:17:33Z</published>
    <updated>2008-08-11T02:20:05Z</updated>

    <summary>今天应该是十年之约的日子，但是我没法去赴约，不知道当年的同学是否真的去赴约了？实...</summary>
    <author>
        <name>Cnangel</name>
        <uri>http://my.huhoo.net/study</uri>
    </author>
    
        <category term="cnangel手记" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="olympic" label="Olympic" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="zh-cn" xml:base="http://my.huhoo.net/study/">
        <![CDATA[今天应该是十年之约的日子，但是我没法去赴约，不知道当年的同学是否真的去赴约了？实在抱歉，不过在7月底我去了我们高中时的母校，母校依旧，只是现在改成了一所艺术类学校，而母校已经搬迁到更好的一个地方，校园环境优美，师资力量强大。<br /><br />晚上看了奥运会的开幕式，精彩壮观，不过韩国的电视台报料之后，震撼力就没有那么大了，不过还是比以前的春节联欢晚会好看些。<br />]]>
        
    </content>
</entry>

</feed>
