script转java_小议:将script 转换成 Java

一位前同事提到了将PHP转换成Java的设想。//2009-7-18

我对PHP不了解。至于“如何将script 转换成Java”,下面是我的一孔之见。

目标:将script 语言转换成Java(script泛指Ruby或JavaScript等“轻量级语言”, 暂不考虑其运行环境).

步骤:

1. 编写script的语法描述(生成式集).

2. 将语法描述解析成语法图(即所谓的抽象语法树),树的结点类型同源码中的结构成份一一对应,如:Function, VariableDefine, IfElse, For, While, Return, ParameterList, CodeBlock, Expresssion等等。——它表明了源码的语法结构。

3. 用抽象语法树来匹配一段script实例(A),生成一个匹配树(我称之为匹配树),匹配树的结点类型同语法树类似。匹配树有严格的树结构——它所含的结点与A实例中的成份是一一对应的。

这一个过程具体上是这样做的:

3.1 生成一个类,专门用来读取script。

3.2 运行这个类,传入script实例(A),成功运行后将生成一个匹配树。

3.3 实际上,对所生成的匹配树需要做一些标准化处理以方便此后的语义分析。比如:将其中的每一只表达式子树化为一只二叉树(以方便此后的算符优先级分析和求值)。

4. 接下来做的是,针对每一类结点构造相应的语义结点。一个语义结点实例负责通过与其对应的匹配树的结点来对相应的源代码成分做语义上的分析或翻译。

注意:语法图和匹配树在概念上既相关联又有差别。

一些经验表明,1~3步会耗去大部分时间、调试也会耗去大部分时间。若使用javaCC(或者使用我的javaCCe),则会省去大部分时间。

这以上过程中可能会遇到这些问题:

1. Java不支持函数或属性的动态增减。

2. script内建对象或native方法(如果有的话)及其各函数的Java化。因为内建对象和native方法没有源码,因此不能翻译,只能模仿,这需要很大的工作量。

3. script可能有自带的正则语言,若要把它化为Java的正则语言(参见java.util.regex.Pattern),可能会很有难度。

4. 对表达式的求值。 表达式几乎可包含所有的语法成分(比如class)。

5. ……

对具有严谨语法结构的语言进行语义分析,理论上似乎没有难度。

反过来讲,要想把Java化为script,工作量会大大增加, 因为Java是“重量级的语言”。

end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值