Tag: 编译器构造

从Java应用程序编译并运行源代码

我需要从我的Java应用程序编译和运行用Python,Pascal或C编写的源代码(单个文件)。 我需要知道: 如果编译过程成功 已编译程序的返回输出 我怎么能做到这一点?

如何找出JVM应用于我的代码的优化?

JVM(尤其是HotSpot VM)因其在运行时可以应用的大量优化而闻名。 有没有办法查看某段代码,看看JVM实际上对它做了什么?

是否有Java的Coffeescript? 换句话说,X被编译为Java

是否有一种语言可以编译为Java代码(不是字节代码而是Java ..所以没有Groovy,Scala,Jython,JRuby等)? 换句话说,有一个CoffeeScript for Java? 我对Java的一个主要缺点就是它如此冗长,并且它没有多重inheritance。 似乎可以合理地通过代码生成来清理语法add mixins / traits和closures。 是的它不优雅,但coffeescript做到了。

创建generics集合数组

实际上,问题应该是 Creating an array of generic anything. 为什么编译器不能处理它呢? 以下内容将被标记为错误 – 无法创建通用数组。 List[] dtoLists = {new ArrayList(), anExistingDtoList}; 要克服这一点,我需要 List[] dtoLists = (List[])Array.newInstance(ArrayList.class, 2); dtoLists[0] = new ArrayList(); dtoLists[1] = anExistingDtoList; 那么,为什么编译器不能将第一种情况转换为第二种情况呢? 我确实认识到generics是编译时确定的而不是运行时确定的,而数组是运行时确定的,因此需要确定类型才能创建数组。 编译器设计人员会遇到哪些技术/逻辑障碍会妨碍他们实现这一目标? 关于语言正交性,问题纯粹是哲学吗? 如果是这样,这种行为将如何违反语言正交性? 这是复杂性的问题吗? 解释复杂性。 我希望我的问题的答案能让我更好地了解java编译器在涉及generics时的行为。 旁注:来吧,停止触发快乐。 答案通用列表数组不回答我的问题。 为什么编译器无法自发执行转换?

用Java编写的编译器:Peephole优化器实现

我正在为Pascal的子集编写一个编译器。 编译器为制造的机器生成机器指令。 我想为这种机器语言编写一个窥视孔优化器,但是我在替换一些更复杂的模式时遇到了麻烦。 窥孔优化器规范 我研究了几种不同的编写窥视孔优化器的方法,并且我已经确定了一种后端方法: 每次生成机器指令时,Encoder都会调用emit()函数。 emit(Instruction currentInstr)检查窥视孔优化表: 如果当前指令与模式的尾部匹配: 检查先前发出的匹配说明 如果所有指令都与模式匹配,则应用优化,修改代码存储的尾端 如果未找到优化,则照常发出指令 目前的设计方法 这个方法很简单,这是我遇到麻烦的实现。 在我的编译器中,机器指令存储在Instruction类中。 我写了一个InstructionMatch类,它存储了用于匹配机器指令的每个组件的正则表达式。 如果模式匹配某些机器指令instr则其equals(Instruction instr)方法返回true 。 但是,我无法完全应用我的规则。 首先,我觉得根据我目前的做法,我最终会得到一堆不必要的物品。 鉴于窥视孔优化数字的完整列表可以编号大约400个模式,这将失控。 此外,我实际上无法使用这种方法进行更难的替换(参见“我的问题”)。 替代方法 我读过的一篇论文将先前的指令折叠成一个长字符串,使用正则表达式匹配和替换,并将字符串转换回机器指令。 这对我来说似乎是一个糟糕的方法,如果我错了,请纠正我。 示例模式,模式语法 x: JUMP x+1; x+1: JUMP y –> x: JUMP y LOADL x; LOADL y; add –> LOADL x+y LOADA d[r]; STOREI (n) –> STORE (n) d[r] 请注意,这些示例模式中的每一个都只是以下机器指令模板的人类可读表示: op_code […]

inheritance的方法Object.clone()无法隐藏公共抽象方法

所以,我有一些狂野的,疯狂的代码,这使得编译器在我的脸上吐了几个小时以下错误: The inherited method Object.clone() cannot hide the public abstract method in IOrderable 罪魁祸首类如下(错误出现在通用的T中): public class MyInterval<T extends Xpto & Successorable> implements Cloneable { public MyInterval clone(){ MyInterval it = null; try { it = (MyInterval) super.clone(); it.max = it.max.clone(); it.min = (T) it.min.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); […]

Java for循环性能问题

考虑这个例子: public static void main(final String[] args) { final List myList = Arrays.asList(“A”, “B”, “C”, “D”); final long start = System.currentTimeMillis(); for (int i = 1000000; i > myList.size(); i–) { System.out.println(“Hello”); } final long stop = System.currentTimeMillis(); System.out.println(“Finish: ” + (stop – start)); } VS public static void main(final String[] args) { final List […]

JavaScript jvm实现

是否有任何JavaScript jvm实现 ? 如果不是,你能否告诉我为什么它还没有意识到? (可能不可能?)我试图了解创建一个缺席的东西? 我之所以要问的原因是我想创建具有编译function的web浏览器ide,甚至没有在计算机上安装jdk或jre(仅在浏览器中)。

最终课程中的非最终方法

我的问题很简单: 编译器是否将最终类中的所有方法视为最终自身? 将final关键字添加到final类中的方法是否有效? 我知道最后的方法有更好的内联机会,这就是我要问的原因。 提前致谢。

Java找不到符号,Java在数组中找不到我的符号?

这是我写这行代码时得到的错误。 symbol : variable isSeletecd location: class java.lang.String if (dorm[0].isSeletecd && meal[0].isSeletecd()) ^ if (dorm[0].isSeletecd && meal[0].isSeletecd()) totalCharges.setText(“2150.00”); 程序: import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; /** The Main class creates the GUI for the Dorm and Meal charges. */ public class Main extends […]