我想在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 回答
从您的文本中我假设您不熟悉CPU如何执行语句,这是编写您自己的编程语言所必需的基本知识 .
要做到这一点,你应该首先花一些时间与真正的assembler language,你可以做online或离线 . 我强烈建议您阅读一些有关此内容的教程,因为这不过是微不足道的 . 学习汇编程序可以让您更好地了解CPU在执行某些代码时实际执行的操作 .
您不必成为汇编程序专家,但是一旦您对它有了解,就会突然非常清楚如何使JVM(实际上是CPU模拟器)执行您的代码:您需要将其编译为JVM可以执行的形式,然后简单地告诉它这样做 .
Edit: 似乎我猜错了 . ;)
Java字节码指令列表:Wikipedia
Devailed VM规范:Oracle
看一下处理发出和运行Java字节码的另一个问题 .
How to emit and execute Java bytecode at runtime?