选择显示字体大小

函数式组合子逻辑java parser框架(一)

  一、释名

  为什么叫精神?
  如果你熟悉c++,那么你可能知道一个叫做”spirit”的parser库。它利用c++的模板元编程能力,使用c++语言本身提供了一个递归下降文法解析的框架

  我这里介绍的jparsec库,就是一个java里面的递归下降文法解析框架
  不过,它并非是spirit的java版本。

  jparsec的蓝本来自haskell语言的parsec库。parsec是一个基于monad的parser组合子库。

  这个库的目的是要在java中提供一个类似parsec, spirit的库,这种组合子库并非c++的专利,java/c#也可以做到。这个库还将在java5.0上被改写,类型安全上它将也不再逊色于c++。

  那么,为什么叫“函数式”呢?java是面向对象的嘛。
  如果你使用过haskell, lisp等语言,这个函数式不用解释你也知道是怎么回事了。
  如果你是一个老牌的c++/java程序员,那么这里还要稍微解释一下。当然如果您对这些虚头八脑的名词不感兴趣,那么,你尽可以跳过这一章,不知道什么是“函数式”,并不会影响你对这个库的理解的。

  c++这几年随着gp的普及,“函数式”这个老孔乙己逐渐又被人从角落里面拽了出来。一个c++程序员所熟悉的“函数式”很可能是stl的for_each, transform,count_if这些函数。
  怎么说呢,就象我不能否定str.length()这个调用属于oo一样,我也无法说for_each, transform不是函数式。

  但是,“函数式”的精髓不在于此。

  一般归纳起来,就像我们说oo是什么多态,封装,继承一样,“函数式”的特征被总结为:

  1.无副作用。
  2.高阶函数。
  3.延迟计算

  而最最有意义的(至少我认为如此),是基于高阶函数的函数组合能力。一些人把这叫做glue。
  简短地说,什么让函数式编程如此强大?是用简单的函数组合出复杂函数的能力。

  我可以想象,说到这里,你还是一头雾水。“什么是组合?1+1不是也把两个1组合成2了吗?new a(new b(), new c())不也是从b和c组合成a了?”

  为了直观,我们来举个例子吧。
  假设,我们在package predicates内部有一个接口:


  interface spredicate{
  boolean is(string s);
  }



  我们有几个基本的实现:


  class isempty implements spredicate{
  public boolean is(string s){return s.length()==0;}
  }


  这个实现判断字符串是不是空。


  class iscaptialized implements spredicate{…}


  这个实现判断这个字符串是不是大写打头。


  class islowercase implements spredicate{…}


  这个实现判断字符串是不是全小写。


  class isequal implements spredicate{
  private final string v;
  public boolean is(string s){return s.equals(v);}
  isequal(string v){this.v = v;}
  }



 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons