Tag: compiler construction

LL1语法中的左递归消除

我试图从以下语法提取中消除左递归 – expression := fragment ( ( + | – | * | / ) fragment )* fragment := identifier | number | ( + | – ) fragment | expression 问题是表达式可以去片段,可以去表达。 我已经尝试了很多方法来消除它,有些看起来像是在工作(在JavaCC中),但我是a)不确定它们的正确性,并且b)很确定我通过改变语法结构来破坏关联性。 我很确定我需要一个表达’,并且有 fragment := identifier | number | ( + | – ) fragment | expression 变成 fragment := identifier | number | […]

如何为字符串执行switch case?

我对switch-case声明有疑问。 这是我的代码: String month = “April”; switch (month.toLowerCase()) { case “january”: monthNumber = 1; break; case “february”: monthNumber = 2; break; case “march”: monthNumber = 3; break; case “april”: monthNumber = 4; break; 等等.. 在这方面我有3个问题: 1)将月份与案例值进行比较,即案例“1月”,案例“2月”。编译器从以下内容中使用了什么? – month.equals(“case-value”)? – 月==案例值? 2)并且case-values内部转换为StringBuilder / StringStringBuffer或者只是它们仍然是String对象?? 3)我如何从字节代码中知道这一点,即是否有任何可用的工具,我可以直接查看编译器生成的代码,以了解内部的行为如何?

如何以编程方式生成.class文件?

我想为Java的玩具语言编写一个编译器。 我想生成可运行的.class文件。 我想知道什么是可用的最好的库或工具? 我知道我可以学习所有指令的二进制格式并构建我自己的常量池等,但这似乎应该已经完成​​的工作:没有必要重新发明轮子,对吧? 在线搜索我发现了两种不同的Java汇编语言, Jasmin和Jamaica ,但只有Jasmin看起来有些维护。 是否有用于将字节代码写入流的Java库? 这是Apache BCEL的内容吗? 他们的工具是字节码生成的“标准”,就像Antlr用于解析一样吗? PS-玩具语言是Brainf *** ,我想要一些我可以有一个简单的“语法”的东西,所以我可以专注于生成方面而不是解析部分…将在下一步的后期出现。

Enum.valueOf(String)方法来自哪里?

在Java SE 7中(最有可能在以前的版本中),Enum类声明如下: public abstract class Enum<E extends Enum> extends Object implements Comparable, Serializable Enum类有一个带有此签名的静态方法: T static<T extends Enum> valueOf(Class enumType, String name) 但是没有静态方法:在Enum类中定义的valueOf(String)也不在Enum所属的层次结构中向上。 问题是valueOf(String)来自哪里? 它是语言的一个特性,即编译器内置的function吗?

错误:在Java中声明布尔值时不是语句

以下代码: boolean continue = false; 返回以下错误: error: not a statement boolean continue = false; ^ 为什么会这样? 我对布尔人非常熟悉。

哪些编译器针对JavaScript运行时?

我正在使用GWT,其中包括Java-to-JavaScript编译器。 在此项目之前,我没有想到使用其他语言定位JavaScript运行时,我很享受GWT体验。 快速搜索将Java2Script视为另一种Java-to-JavaScript解决方案。 还有其他针对JavaScript运行时的成熟编译器吗?

如何使用Java的Scanner类和正则表达式来标记输入?

仅仅出于我自己的目的,我正在尝试在Java中构建一个tokenizer,我可以在其中定义一个常规语法并根据它来标记输入。 不推荐使用StringTokenizer类,我在Scanner中发现了一些暗示我想做的事情,但没有运气的函数。 有人知道这个问题的好方法吗?

为什么编译器声明没有唯一的最大实例存在?

我有以下课程: public class Obj extends BaseModel { public static final String OBJECT = “object”; public Obj(T object) { setObject(object); } public T getObject() { return get(OBJECT); } public void setObject(T object) { set(OBJECT, object); } } 和… /** This is a 3rd party library class **/ public class BaseModel implements ModelData, Serializable { //…members and […]

如何在Java程序中调用Rhino编译的JavaScript方法(类文件)?

我将以下JavaScript文件“test.js”编译成“test.class”: var test = (function () { var that = {}; that.addNumbers = function (a, b) { return a+b; }; return that; }()); 我想在简单的Java程序“run.java”中调用已编译的JavaScript函数“test.addNumbers(1,2)”,如下所示: public class run { public static void main(String[] args) throws Exception { Context cx = Context.enter(); try { Scriptable scope = cx.initStandardObjects(); // HOW TO CALL THE METHOD, Test.addNumbers(1,2)? Please help […]

反汇编Java JIT编译的本机字节码

有没有办法对Java即时编译器生成的本机代码进行汇编转储? 还有一个相关的问题:有没有办法在不运行JVM的情况下使用JIT编译器将我的代码编译成本机代码?