随笔-39  评论-246  文章-0  trackbacks-0
脚本技术
描述跟脚本相关的各种技术
使用高阶函数开发语法分析器      摘要: 这篇短文的Idea来源于一篇论文。这篇论文的题目是Higier-Order Functions for Parsing,Graham Hutton写的。论文中使用了一种叫Miranda的函数式语言来讲述如何使用高阶函数开发语法分析器。

高阶函数很多语言都支持,譬如JavaScript啊,C#的lambda expression啊,或者是我自己做的语言Vczh Free Script 2.0。不过Miranda是惰性计算的语言,我们常用的语言都不具有惰性计算的特性。因此我阅读了这篇文章之后,自己用Vczh Free Script 2.0写了一个等价的小规模的语法分析器。结构跟论文中所提到的那个有所区别,不过相同的经验可以直接应用在JavaScript里面或其它语言(例如Python等)的lambda expression里。C#我不知道行不行,没去考证。

这里首先要解决一个问题,就是如何引用没被定义的名字的问题。譬如如下文法:

Term= | "(" Exp ")"
Fa  阅读全文
posted @ 2008-05-21 16:57 陈梓瀚(vczh) 阅读(1119) | 评论 (4)  编辑
如何实现语言中的闭包(Closure)      摘要: 已经忘了是去年还是前年听到微软说要在C# 3.0里为C#添加lambda表达式,与此同时Java的团队也一直在说想为Java添加lambda表达式。到了今天,C#似乎已经把这个特性加进去了,Java还没有。Java说这个特性还在计划列表之中,不过暂时可以使用匿名类来代替。想必是因为在Java中表示函数指针的方法比较奇怪罢……

其实无论是lambda表达式(事实上应该叫匿名函数)或是匿名类,都能归属到一种叫闭包的东西上面。闭包原来是代数中的用语,只是那些研究理论的老大们觉得这玩意儿也能拉到“闭包”里面去,于是就叫闭包了。匿名函数原本是丘奇发明的一个lambda-calculus的其中一部分,后来计算机的老大们突然发现lambda-calculus非常适合用来充当程序设计语言的模型,于是就对它进行了非常多的扩充,还弄了个什么类型理论出来。好像扯远了。

想象一下如下使用闭包的代码:

MyClosure=func(Number1)
{
return func(Numbe  阅读全文
posted @ 2008-04-21 13:55 陈梓瀚(vczh) 阅读(1462) | 评论 (0)  编辑