仓酷云
标题:
了解下JAVA的面向Java开辟职员的Scala指南 - 构建盘算器,第3部分
[打印本页]
作者:
再见西城
时间:
2015-1-18 11:18
标题:
了解下JAVA的面向Java开辟职员的Scala指南 - 构建盘算器,第3部分
其实你不用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
是一种为 Internet发展的计算机语言
作者:
分手快乐
时间:
2015-1-22 11:40
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者:
谁可相欹
时间:
2015-1-24 15:31
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者:
精灵巫婆
时间:
2015-2-1 19:51
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
金色的骷髅
时间:
2015-2-7 14:39
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
柔情似水
时间:
2015-2-22 08:17
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
冷月葬花魂
时间:
2015-2-22 20:19
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
若相依
时间:
2015-3-6 16:45
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者:
愤怒的大鸟
时间:
2015-3-13 04:11
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
因胸联盟
时间:
2015-3-20 12:34
是一种使网页(Web Page)产生生动活泼画面的语言
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2