首页 文章

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

提问于
浏览
1

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

第一步我试着写一个非常简单的陈述(添加例如3 7)

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

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

然后

Antlr生成了Lexer,Parser和Listener

我用过它们

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创建我自己的语言

2 回答

  • 0

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

    要做到这一点,你应该首先花一些时间与真正的assembler language,你可以做online或离线 . 我强烈建议您阅读一些有关此内容的教程,因为这不过是微不足道的 . 学习汇编程序可以让您更好地了解CPU在执行某些代码时实际执行的操作 .

    您不必成为汇编程序专家,但是一旦您对它有了解,就会突然非常清楚如何使JVM(实际上是CPU模拟器)执行您的代码:您需要将其编译为JVM可以执行的形式,然后简单地告诉它这样做 .

    Edit: 似乎我猜错了 . ;)

    Java字节码指令列表:Wikipedia
    Devailed VM规范:Oracle

  • 0

    看一下处理发出和运行Java字节码的另一个问题 .

    How to emit and execute Java bytecode at runtime?

相关问题