﻿<?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++博客-λ-calculus-随笔分类-脚本技术</title><link>http://www.cppblog.com/vczh/category/6825.html</link><description>Vczh Free Script 2.0 New Features Developing</description><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 13:52:13 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 13:52:13 GMT</pubDate><ttl>60</ttl><item><title>使用高阶函数开发语法分析器</title><link>http://www.cppblog.com/vczh/archive/2008/05/21/50656.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 21 May 2008 08:57:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/05/21/50656.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/50656.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/05/21/50656.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/50656.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/50656.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     这篇短文的Idea来源于一篇论文。这篇论文的题目是Higier-Order Functions for Parsing，Graham Hutton写的。论文中使用了一种叫Miranda的函数式语言来讲述如何使用高阶函数开发语法分析器。<br><br>    高阶函数很多语言都支持，譬如JavaScript啊，C#的lambda expression啊，或者是我自己做的语言Vczh Free Script 2.0。不过Miranda是惰性计算的语言，我们常用的语言都不具有惰性计算的特性。因此我阅读了这篇文章之后，自己用Vczh Free Script 2.0写了一个等价的小规模的语法分析器。结构跟论文中所提到的那个有所区别，不过相同的经验可以直接应用在JavaScript里面或其它语言（例如Python等）的lambda expression里。C#我不知道行不行，没去考证。<br><br>    这里首先要解决一个问题，就是如何引用没被定义的名字的问题。譬如如下文法：<br><br>    Term=<number> | "(" Exp ")"<br>    Fa&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/05/21/50656.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/50656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-05-21 16:57 <a href="http://www.cppblog.com/vczh/archive/2008/05/21/50656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于《构造可配置词法分析器》的后续</title><link>http://www.cppblog.com/vczh/archive/2008/05/16/50094.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 16 May 2008 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/05/16/50094.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/50094.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/05/16/50094.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/50094.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/50094.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 在撰写了《构造可配置词法分析器》之后，我陆续收到了不少读者的来信，不过大多数都是要求源代码的。这篇文章原先是发布在自己的<a style="TEXT-DECORATION: underline" href="http://hi.baidu.com/vczh/" target=_blank>百度空间</a>的，不过现在那个地方已经不打算写技术相关的东西了。而且由于cppblog的一些用户也转载了那篇文章，因此不打算再在这里重复贴了。<br><br>&nbsp;&nbsp;&nbsp; 由于大多数读者都向我发邮件要求源代码，因此我想到，上一篇文章虽然把所有的原理都说明白了，不过关于实现相关的数据结构的那些细节却都没说出来。对与那些真的想实现自己的正则表达式引擎的人来说，可能还不能从文章中得到所有问题的解决方法。不过鉴于本人一贯来不想把所有的细节问题都说得太过于繁琐（留点问题给读者想也是好的，不然文章就没起到带动学习的作用了），因此作出决定：接下来的几天如果有空的话还要撰写一篇新的文章。<br><br>&nbsp;&nbsp;&nbsp; 新的文章将着眼于【如何实现正则表达式引擎】这个话题，续《构造可配置词法分析器》的内容继续讨论。在这篇文章之中，我打算把使用DFA构造的正则表达式引擎的实现方法稍微描述一下（因为实际上难度不大），然后再花比较大的篇幅来讲述实现正向预查、反向预查、匿名获取、命名获取和子表达式引用的方法。文章中还会描述<a style="TEXT-DECORATION: underline" href="http://www.cppblog.com/vczh/archive/2008/05/07/49158.html" target=_blank>这篇文章</a>中所提及的优化正则表达式的方法（招太多口水了，看来不写也会有很多人不高兴的，这是文化问题）。<br><br>&nbsp;&nbsp;&nbsp; 敬请等待。</p>
<img src ="http://www.cppblog.com/vczh/aggbug/50094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-05-16 21:11 <a href="http://www.cppblog.com/vczh/archive/2008/05/16/50094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何实现语言中的闭包（Closure）</title><link>http://www.cppblog.com/vczh/archive/2008/04/21/47730.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 21 Apr 2008 05:55:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/04/21/47730.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/47730.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/04/21/47730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/47730.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/47730.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     已经忘了是去年还是前年听到微软说要在C# 3.0里为C#添加lambda表达式，与此同时Java的团队也一直在说想为Java添加lambda表达式。到了今天，C#似乎已经把这个特性加进去了，Java还没有。Java说这个特性还在计划列表之中，不过暂时可以使用匿名类来代替。想必是因为在Java中表示函数指针的方法比较奇怪罢……<br><br>    其实无论是lambda表达式（事实上应该叫匿名函数）或是匿名类，都能归属到一种叫闭包的东西上面。闭包原来是代数中的用语，只是那些研究理论的老大们觉得这玩意儿也能拉到“闭包”里面去，于是就叫闭包了。匿名函数原本是丘奇发明的一个lambda-calculus的其中一部分，后来计算机的老大们突然发现lambda-calculus非常适合用来充当程序设计语言的模型，于是就对它进行了非常多的扩充，还弄了个什么类型理论出来。好像扯远了。<br><br>    想象一下如下使用闭包的代码：<br><br>    MyClosure=func(Number1)<br>    {<br>        return func(Numbe&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/04/21/47730.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/47730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-04-21 13:55 <a href="http://www.cppblog.com/vczh/archive/2008/04/21/47730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>