仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 702|回复: 10
打印 上一主题 下一主题

[学习教程] 了解下JAVA的面向Java开辟职员的Scala指南 - 构建盘算器,第3部分

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:18:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。
接待勇于探究的读者回到我们的系列文章中!本月持续探究Scala的言语和库撑持,我们将改革一下盘算器DSL并终极“完成它”。DSL自己有点复杂—一个复杂的盘算器,今朝为止只撑持4个基础数学运算符。但要记着,我们的方针是创立一些可扩大的、天真的对象,而且今后能够轻松加强它们以撑持新的功效。
持续前次的会商……
申明一下,今朝我们的DSL有点庞杂。我们有一个笼统语法树(AbstractSyntaxTree),它由大批case类构成……
清单1.后端(AST)
packagecom.tedneward.calcdsl
{
 //...
 private[calcdsl]abstractclassExpr
 private[calcdsl] caseclassVariable(name:String)extendsExpr
 private[calcdsl] caseclassNumber(value:Double)extendsExpr
 private[calcdsl] caseclassUnaryOp(operator:String,arg:Expr)extendsExpr
 private[calcdsl] caseclassBinaryOp(operator:String,left:Expr,right:Expr)
 extendsExpr
}
……对此我们能够供应相似注释器的举动,它能最年夜限制地简化数学表达式……
清单2.后端(注释器)
packagecom.tedneward.calcdsl
{
 //...
 objectCalc
 {
  defsimplify(e:Expr):Expr={
   //firstsimplifythesubexpressions
   valsimpSubs=ematch{
    //Askeachsidetosimplify
    caseBinaryOp(op,left,right)=>BinaryOp(op,simplify(left),simplify(right))
    //Asktheoperandtosimplify
    caseUnaryOp(op,operand)=>UnaryOp(op,simplify(operand))
    //Anythingelsedoesnthavecomplexity(nooperandstosimplify)
    case_=>e
   }
   //nowsimplifyatthetop,assumingthecomponentsarealreadysimplified
   defsimplifyTop(x:Expr)=xmatch{
    //Doublenegationreturnstheoriginalvalue
    caseUnaryOp("-",UnaryOp("-",x))=>x

    //Positivereturnstheoriginalvalue
    caseUnaryOp("+",x)=>x

    //Multiplyingxby1returnstheoriginalvalue
    caseBinaryOp("*",x,Number(1))=>x

    //Multiplying1byxreturnstheoriginalvalue
    caseBinaryOp("*",Number(1),x)=>x

    //Multiplyingxby0returnszero
    caseBinaryOp("*",x,Number(0))=>Number(0)

    //Multiplying0byxreturnszero
    caseBinaryOp("*",Number(0),x)=>Number(0)

    //Dividingxby1returnstheoriginalvalue
    caseBinaryOp("/",x,Number(1))=>x

    //Dividingxbyxreturns1
    caseBinaryOp("/",x1,x2)ifx1==x2=>Number(1)

    //Addingxto0returnstheoriginalvalue
    caseBinaryOp("+",x,Number(0))=>x

    //Adding0toxreturnstheoriginalvalue
    caseBinaryOp("+",Number(0),x)=>x

    //Anythingelsecannot(yet)besimplified
    casee=>e
   }
   simplifyTop(simpSubs)
  }

  defevaluate(e:Expr):Double=
  {
   simplify(e)match{
    caseNumber(x)=>x
    caseUnaryOp("-",x)=>-(evaluate(x))
    caseBinaryOp("+",x1,x2)=>(evaluate(x1)+evaluate(x2))
    caseBinaryOp("-",x1,x2)=>(evaluate(x1)-evaluate(x2))
    caseBinaryOp("*",x1,x2)=>(evaluate(x1)*evaluate(x2))
    caseBinaryOp("/",x1,x2)=>(evaluate(x1)/evaluate(x2))
   }
  }
 }
}
<p>
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,net网页编程beans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。
变相怪杰 该用户已被删除
沙发
发表于 2015-1-19 16:11:22 | 只看该作者
是一种为 Internet发展的计算机语言
分手快乐 该用户已被删除
板凳
发表于 2015-1-22 11:40:27 来自手机 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
谁可相欹 该用户已被删除
地板
发表于 2015-1-24 15:31:19 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-1 19:51:06 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-7 14:39:55 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
柔情似水 该用户已被删除
7#
发表于 2015-2-22 08:17:41 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
冷月葬花魂 该用户已被删除
8#
发表于 2015-2-22 20:19:51 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
若相依 该用户已被删除
9#
发表于 2015-3-6 16:45:34 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
愤怒的大鸟 该用户已被删除
10#
发表于 2015-3-13 04:11:44 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
因胸联盟 该用户已被删除
11#
发表于 2015-3-20 12:34:53 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 05:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表