仓酷云
标题:
JAVA网站制作之XJ: 一个扩大Java言语的计划仓酷云
[打印本页]
作者:
小女巫
时间:
2015-1-18 11:35
标题:
JAVA网站制作之XJ: 一个扩大Java言语的计划仓酷云
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。Java向来是一种以稳定应万变的言语。在Java5中,annotation的引进使得Java在某些特别的使用场所(如企业使用)中可以举行定制。Annotations可被看做是用Java中心手艺来界说的"范畴特定言语"(DomainSpecificLanguages,DSLs)。
Annotation实质上是一种name-value情势的绑定,仅限于它们所能表达的意义。它们不克不及界说新的语法布局,比方为collection增添个"select"。现实上annotations的存在展现了Java自己必要DSL的兼容,可是却缺少可以完整完成DSL所需要的丰厚性。
在这里我们为使Java可以撑持自界说语义给出了一些倡议和计划。假如可以举行一些得当的"扩大"(extension),在不与现有的语法抵触的情形下而且保存向后兼容。比方:用一些语法界说类来发生新的语法布局,临时称之为"语义类",如许就可以够以现无方式在程序中得以完成。我们把这个计划称之:
XJ(eXtensibleJava,可扩大Java)
。
XJ给Java带来了这个所谓的"语义类"。一个语义类也是一个有一般语法的的Java类,当Java剖析器碰到由语义类界说的语法布局,那末就用语义类中界说的语法来处置这些输出信息。假如剖析乐成,那这些语法能够分解为一个Java笼统语法树(AST:abstractsyntaxtree)。一个笼统语法树能够有一个尺度接口被Java编译器所利用当处置语法的时分。AST的新范例能够经由过程完成符合的接口来举行创立。
思索到JAVA中的一个复杂言语布局:根据某些前提从一个collection当选一个元素出来。一个利用新布局的例子以下所示:
Java代码
登录/注册后可看大图
2020570.gif
(578 Bytes, 下载次数: 5)
下载附件
保存到相册
JAVA网站制作之XJ: 一个扩大Java言语的计划仓酷云
2015-1-18 11:35 上传
<br>
import
languagemylang.Select;
public
PersongetChild(Vector<Person>people){
@SelectPersonpfrompeoplewherep.age<18{
return
p;
}
else
{
return
null
;}
}
importlanguagemylang.Select;publicPersongetChild(Vector<Person>people){@SelectPersonpfrompeoplewherep.age<18{returnp;}else{returnnull;}}
复制代码
这个新的语法接口能够叫做"Select",用"@"标记界说在语法类饮用的的前缀。界说了一个Vector从当选出前提为年事小于18岁的人群。最初前往满意前提的值,大概前往空值。Select的语法界说以下。
Java代码
<br>
public
PersongetChild(Vector<Person>people){
for
(
int
i=0;i<people.size();i++){
Personp=people.elementAt(i);
if
(p.age<18)
return
p;
}
return
null
;
}
publicPersongetChild(Vector<Person>people){for(inti=0;i<people.size();i++){Personp=people.elementAt(i);if(p.age<18)returnp;}returnnull;}
复制代码
同理,经由过程
XJ
,一个新的语法接口经由过程界说语义类来界说。一个语义类包含语法由Java剖析器来处置详细的程序语法而且前往一个AST。一旦一个语义类被界说,它就可以经由过程在语义界说标记"@"后界说从而在程序代码中被利用。select的布局界说以下:
Java代码
<br>
package
mylang;
import
languagejava.syntax.Grammar;
import
java.syntax.AST;
import
java.syntax.Block;
import
java.syntax.Context;
import
java.syntax.Statement;
import
java.syntax.Sugar;
import
java.syntax.Type;
import
java.syntax.Var;
public
class
Select
extends
Sugar{
private
Typetype;
private
Varvar;
private
ASTcollection;
private
ASTtest;
private
Blockbody;
private
Blockotherwise;
public
Select(TypeT,Stringn,ASTc,ASTt,Blockb,Blocko){
type=T;
var=
new
Var(n);
collection=c;
test=t;
body=b;
otherwise=o;
}
//SelectGrammardefinition
@Grammar
extends
Statement{
Select::=
T=Type
n=Name
"from"c=Exp
"when"t=Exp
b=Block
o=("else"Block|{
return
new
Block();})
{
return
new
Select(T,n,c,t,b,o);}.}
//Desugartoproduceanabstractsyntaxtree
public
ASTdesugar(Contextcontext){
Class<T>cType=context.getType(collection);
if
(isVector(cType))
return
desugarVector(cType,contect);
else
//Morecases...
}
public
ASTdesugarVector(Class<T>cType,Contextcontext){
Vardone=context.newVar();
Varcoll=context.newVar();
return
[|
boolean
<done>=
false
;
<cType>coll=<collection>;
for
(
int
i=0;i<<coll>.size();i++){
<underlyingType(cType)><var>=<coll>.elementAt(i);
if
(<test>){
<done>=
true
;
<body>;
}
}
if
(!<done>)
<otherwise>;
|];
}
}
packagemylang;importlanguagejava.syntax.Grammar;importjava.syntax.AST;importjava.syntax.Block;importjava.syntax.Context;importjava.syntax.Statement;importjava.syntax.Sugar;importjava.syntax.Type;importjava.syntax.Var;publicclassSelectextendsSugar{privateTypetype;privateVarvar;privateASTcollection;privateASTtest;privateBlockbody;privateBlockotherwise;publicSelect(TypeT,Stringn,ASTc,ASTt,Blockb,Blocko){type=T;var=newVar(n);collection=c;test=t;body=b;otherwise=o;}//SelectGrammardefinition@GrammarextendsStatement{Select::=T=Typen=Name"from"c=Exp"when"t=Expb=Blocko=("else"Block|{returnnewBlock();}){returnnewSelect(T,n,c,t,b,o);}.}//DesugartoproduceanabstractsyntaxtreepublicASTdesugar(Contextcontext){Class<T>cType=context.getType(collection);if(isVector(cType))returndesugarVector(cType,contect);else//Morecases...}publicASTdesugarVector(Class<T>cType,Contextcontext){Vardone=context.newVar();Varcoll=context.newVar();return[|boolean<done>=false;<cType>coll=<collection>;for(inti=0;i<<coll>.size();i++){<underlyingType(cType)><var>=<coll>.elementAt(i);if(<test>){<done>=true;<body>;}}if(!<done>)<otherwise>;|];}}
复制代码
从Select的语律例则界说能够看到一个优秀格局的语句是经由过程一个称号,关头字"from"及其表达式,关头字"when"及其表达式,和界说select块的注释。在注释后,还能够界说if-else之类的可选关头字。在select划定规矩中的每一个case中,剖析元素发生一个能够和称号可选联系关系的值。比方,和称号为"T"相干联的范例。别的,剖析划定规矩也包括前往值的Java语句。这些包括在{and}中,并且能够援用任安在前面界说的称号。由Selectrule前往终极了局是Select类的一个实例。
由语法所决意的前往值必需是java.syntax.AST类的一个实例。假如前往值是尺度JavaAST类的实例,那在语法类中不必要做特别处置。假如前往值是自界说语法类的实例,那末这个类必需完成AST接口,出处编译器翻译成JavaVM辨认的代码。更复杂易行的举措是用户自界说语义类从java.syntax.Sugar承继,而java.syntax.Sugar经由过程desugar办法完成了AST接口。desugar办法卖力把输出的信息注释为接口中已界说的AST(笼统语法树),
在这篇漫笔中我们先容了Java的扩大(XJ),次要是经由过程界说新的Java语法来对Java言语自己举行扩大。固然XJ还没有在Java中完成,可是它是XMF言语的次要特性。XMF言语已在贸易工具(XMF-Mosaic)中被利用并在2008年开源。关于本文更多的细节和例子能够参照这篇文章:超出Annotations:可扩大Java言语的企图。来自:http://www.javaeye.com/news/1924
有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。
作者:
再见西城
时间:
2015-1-21 10:39
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者:
仓酷云
时间:
2015-1-30 15:31
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
作者:
透明
时间:
2015-2-6 13:48
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者:
冷月葬花魂
时间:
2015-2-8 06:24
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
深爱那片海
时间:
2015-2-9 00:30
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
小魔女
时间:
2015-2-13 11:44
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者:
爱飞
时间:
2015-2-24 15:20
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者:
山那边是海
时间:
2015-3-7 12:31
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者:
因胸联盟
时间:
2015-3-15 05:09
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者:
分手快乐
时间:
2015-3-17 06:09
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
作者:
老尸
时间:
2015-3-28 12:46
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者:
若相依
时间:
2015-3-29 02:28
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
乐观
时间:
2015-4-9 10:34
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
我是中文名字
时间:
2015-4-9 10:36
来瞧瞧来瞧瞧来瞧瞧
作者:
愤怒的大鸟
时间:
2015-4-15 03:49
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者:
蒙在股里
时间:
2015-4-15 22:19
是一种为 Internet发展的计算机语言
作者:
再现理想
时间:
2015-4-28 06:12
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者:
谁可相欹
时间:
2015-5-1 03:21
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者:
只想知道
时间:
2015-5-1 16:53
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
简单生活
时间:
2015-5-1 19:10
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
欢迎光临 仓酷云 (http://www.ckuyun.com/)
Powered by Discuz! X3.2