java - 如何在 JVM 上执行? (带有 Antlr 的词法分析器和解析器)

标签 java jvm antlr4 java-bytecode-asm

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

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

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

grammar gr;
formula : Digit Add Digit Equal;
Digit   
  :  '0'..'9'  
  ;  
Add     : '+';
Equal   : '=';    
WS : [\t\r\n]+ -> 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如何执行语句,这是编写自己的编程语言所需的基础知识。

要做到这一点,您应该首先花一些时间与真正的 assembler language 相处。 ,你可以这样做online或离线。我强烈建议阅读一些关于此的教程,因为这绝不是微不足道的。学习汇编器将使您更好地理解 CPU 在执行某些代码时实际执行的操作。

您不必成为汇编专家,但是一旦您对它有了一定的了解,就会突然变得非常清楚如何让 JVM(本质上是一个 CPU 模拟器)执行您的代码:您需要编译将其转换为 JVM 可以执行的形式,然后简单地告诉它执行该操作。

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

Java字节码指令列表:Wikipedia
损坏的虚拟机规范:Oracle

关于java - 如何在 JVM 上执行? (带有 Antlr 的词法分析器和解析器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658011/

相关文章:

java - Android App : Log-in to website, 维护 session - Java

sockets - 使用 ServerSocket 绑定(bind)已使用的端口时,Java 7 不会抛出 BindException

java - 在 JVM 级别重新定义 Locale 的日期时间格式

Java VirtualMachine.loadAgent 仅一次加载代理

gradle - Gradle generateGrammarSource任务不起作用

不同包中的java复制构造函数

java - 如何使用 Android 按钮获取整数作为用户输入?

javascript - 确定 ECMAScript 赋值表达式的左侧或右侧

Java - 调用方法时遇到问题

antlr4 - 是否可以在不实际匹配 token 的情况下在 ANTLR4 中向前看?