Jvm 创建简单的领域特定语言
我很想了解如何创建一种特定于领域的语言。现在这个域非常基本,只要有一些变量并运行一些循环,if语句 编辑:该语言将以非英语为基础,语法非常简单 我正在考虑将目标对准Java虚拟机,即编译成Java字节码 目前我知道如何使用ANTLR编写一些简单的语法 我知道ANTLR创建了一个lexer和parser,但是我如何从这里开始呢Jvm 创建简单的领域特定语言,jvm,code-generation,antlr,dsl,bytecode,Jvm,Code Generation,Antlr,Dsl,Bytecode,我很想了解如何创建一种特定于领域的语言。现在这个域非常基本,只要有一些变量并运行一些循环,if语句 编辑:该语言将以非英语为基础,语法非常简单 我正在考虑将目标对准Java虚拟机,即编译成Java字节码 目前我知道如何使用ANTLR编写一些简单的语法 我知道ANTLR创建了一个lexer和parser,但是我如何从这里开始呢 关于语义分析:它必须手动编写还是有一些工具来创建 如何将lexer和解析器的输出转换为Java字节码 我知道有像ASM或BCEL这样的库,但具体的过程是什么 有什么框架可
- 关于语义分析:它必须手动编写还是有一些工具来创建
- 如何将lexer和解析器的输出转换为Java字节码
- 我知道有像ASM或BCEL这样的库,但具体的过程是什么
- 有什么框架可以实现这一点吗?如果有,最简单的是什么
您也可以尝试,但这是一个投影编辑器,初学者可能会发现它更难。然而,它的功能不亚于Xtext。具有简单语法的DSL可能意味着也可能不意味着简单语义 简单的语义可能意味着也可能不意味着容易翻译成目标语言;只有在DSL和目标语言共享许多公共数据类型和执行模型的情况下,这种转换才是“技术上容易的”。(约束系统具有简单的语义,但将它们转换为Fortran真的很难!)。(你会想:如果翻译你的DSL很容易,为什么你会有它?) 如果您想要构建DSL(在您的情况下,您坚持使用easy,因为您正在学习),那么您需要DSL编译器基础设施,其中包含您需要的任何内容,包括对困难翻译的支持。处理将所有DSL翻译成所有可能的目标语言的“所需”显然是一套不可能的庞大机器 然而,有很多显然是有帮助的:
- 强大的解析机器(谁想玩弄结构是强制的语法 由于解析机制的弱点?(如果您不知道这是什么,请阅读LL(1)Grammars作为示例)
- 自动构造已解析DSL的表示(例如,抽象语法树)
- 访问/修改/构建新AST的能力
- 能够捕获有关符号及其含义的信息(符号表)
- 能够为DSL构建AST分析,以支持需要的翻译 信息来自树中的“远处”,影响树中特定点的翻译
- 能够轻松地重新授权AST以实现局部优化
- 如果DSL有一些过程方面,则能够构造/分析控制和数据流信息,并且代码生成需要深入的推理或优化
我们有上面所画的所有基础设施和更多。(显然没有,也不可能有月球)。你可以看到一个完整的、一体化的“页面”,.我不想深入,我只想创建一种简单的、基于非英语的、针对Java虚拟机的域特定语言。因此,该域实际上是非英语的、语法简单的。@Gautham5678,那么宏可能是您的最佳选择。您的简单语法可能是S表达式的子集。实际上,该项目是o等等,很抱歉我忘了这个问题,我将在2个月后查看xtext。我还觉得@IraBaxter的答案也很好,所以我现在就接受Rui的答案