java openjdk 没javac_对openjdk的javac编译器扩展了一个语法糖

我的扩展功能描述如下:

在java的现有语法中加入var来声明变量,并且可以根据初始化数据来自动类型推导。

举两个例子:

例一:

如下JAVA代码(注意这里的var是新语法):

import java.util.*;public classTestHello {private var i = new ArrayList>();

}

在用我修改的编译器编译之后,再用反编译工具反编译之后会看到如下形式的代码:

importjava.util.ArrayList;importjava.util.List;public classTestHello

{private ArrayList> i = newArrayList();

}

例二:

如下JAVA代码(注意这里的var是新语法):

public classTestInit {public var v = 1.0;

}

在用我修改的编译器编译之后,再用反编译工具反编译之后会看到如下形式的代码:

public classTestInit

{public double v = 1.0D;

}

思路本身非常简单:

1.用初始化语句右表达式的类型做为变量的类型。

2.如果没有初始化值,或为空,则无法推导,这时就直接用Object。

不过:

因为我刚刚对javac的源代码研究了一天,仅仅是大致看了“词法分析”和“语法分析”的代码,所以我做这个语法扩展是在语法分析的过程中加的代码,这样的做法是有局限性的,即:只有当初始化表达式中存在常量,或用new操作符后面有声明类型的情况下才可以自动类型识别,而不能对于用函数调用(或属性引用)来初始化变量的情况进行识别(这是因为在语法分析过程中,分析到这个变量初始化的语句时,通常还没有分析到依赖的其它资源呢),所以如果要做得全面一些,则不能在语法分析过程进行类型识别,而是要在整个语法分析完成之后再第二次扫描语法树,这样就可以做到了。

暂时不打算再继续完善这个扩展了,以后如果实现自己的语言编译器再考虑完整的类型识别系统实现。

我的代码可以在这里下载:https://github.com/naturemickey/valjavac

下载后在代码中搜“ADD BY ZHOUYOU”就可以找到我写的代码(只有几十行而已),其它的代码都是openjdk的。

注意:我是用jdk8u40的javac代码来修改的,所以读者如果要自己实践的话,需要安装jdk8(java编译器是bootstrap的,完全用java编写的)。

由于很多人对javac的代码不熟(其实我也只是刚刚接触第二天而已,也不熟),所以再多提一句:

openjdk的javac运行的主类是com.sun.tools.javac.Main,直接运行这个类,并把要编译的文件名做为main函数的参数即可。

OpenJDK一个开源的Java开发工具包,它提供了Java编译器javac)和Java运行时环境(JRE)等组件。下面是配置OpenJDK中的javac的步骤: 1. 首先,你需要安装OpenJDK。你可以从OpenJDK官方网站(https://openjdk.java.net/)下载适合你操作系统的安装包,并按照官方文档进行安装。 2. 安装完成后,打开终端或命令提示符窗口,输入以下命令来验证OpenJDK是否成功安装: ``` java -version ``` 如果成功安装,你将看到OpenJDK的版本信息。 3. 接下来,你需要配置环境变量。在Windows系统中,你可以按照以下步骤进行配置: - 右键点击“我的电脑”或“此电脑”,选择“属性”。 - 在左侧面板中,点击“高级系统设置”。 - 在弹出的对话框中,点击“环境变量”按钮。 - 在“系统变量”部分,找到名为“Path”的变量,并点击“编辑”。 - 在弹出的对话框中,点击“新建”并输入OpenJDK的安装路径(例如:C:\Program Files\OpenJDK\bin)。 - 点击“确定”保存修改。 在Linux和Mac系统中,你可以编辑`~/.bashrc`或`~/.bash_profile`文件,并添加以下行: ``` export PATH=/path/to/openjdk/bin:$PATH ``` 其中`/path/to/openjdk`是OpenJDK的安装路径。 4. 配置完成后,打开新的终端或命令提示符窗口,输入以下命令来验证javac是否配置成功: ``` javac -version ``` 如果成功配置,你将看到javac的版本信息。 希望以上信息对你有帮助!如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值