如何在JVM上执行它?(Lexer & Parser with Antlr)



我想在JVM上创建自己的编程语言

第一步,我尝试编写非常简单的语句(添加例如 3+7)

所以我用Antlr创建了一个词法分析器和一个解析器

grammar gr;
formula : Digit Add Digit Equal;
Digit   
  :  '0'..'9'  
  ;  
Add     : '+';
Equal   : '=';    
WS : [trn]+ -> skip ;

然后

Antlr 生成的词法分析器、解析器和侦听器

我用过它们

import java.io.IOException;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
public class gr {
    public static void main(String[] args) throws IOException {
        String str = "7+8=";        
        ANTLRInputStream input = new ANTLRInputStream(str);     
        grLexer lexer = new grLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        grParser parser = new grParser(tokens);
        ParseTree tree = parser.formula();
        System.out.println(tree.toStringTree(parser));  
    }
}

结果:

(formula 7 + 8 =)

现在我的问题在这里!!

我如何在 JVM 上执行这一行 (7 + 8 =???(获取结果 15)

似乎我必须使用 ASM 库?是的???

如果您的答案是肯定的,请帮助我获得非常简单的示例

请指导我如何使用JVM创建我自己的语言

从您的文本中,我假设您不太熟悉 CPU 如何执行语句,这是编写自己的编程语言所需的基本知识。

要做到这一点,您应该首先花一些时间使用真正的汇编语言,您可以在线或离线进行。我强烈建议阅读一些有关此的教程,因为这绝非微不足道。学习汇编程序将使您更好地了解CPU在必须执行某些代码时实际执行的操作。

不必成为汇编程序专家,但是一旦你对它有了一定的了解,突然变得非常清楚该怎么做才能让JVM(本质上是一个CPU模拟器)来执行你的代码:你需要把它编译成JVM可以执行的形式,然后简单地告诉它这样做。

编辑:看来我猜错了。 ;)

Java字节码指令列表:维基百科
已剥离的虚拟机规范:甲骨文

看看另一个关于发射和运行Java字节码的问题。

如何在运行时发出和执行 Java 字节码?

最新更新