在 scala 中评估外部 DSL 需要哪些步骤,哪些库可用于这些步骤?
在四处挖掘之后,我能够使用解析器组合器从案例类中创建一个 AST。该过程的下一步是什么?我查看了 kiama(https://code.google.com/p/kiama/),但从文档中似乎不清楚(可能是由于我有限的语言处理知识)如何维护符号表,如何将操作绑定到 dsl 语句等等
在 scala 中评估外部 DSL 需要哪些步骤,哪些库可用于这些步骤?
在四处挖掘之后,我能够使用解析器组合器从案例类中创建一个 AST。该过程的下一步是什么?我查看了 kiama(https://code.google.com/p/kiama/),但从文档中似乎不清楚(可能是由于我有限的语言处理知识)如何维护符号表,如何将操作绑定到 dsl 语句等等
我同意在 Kiama 中为通用语言处理任务提供更多教程式的文档会很好。我们正在努力,但目前我没有具体的报告。
同时,我能提供的只是 Kiama 发行版中的示例。特别是,minijava 示例对于 Java 的重要子集来说是一个可合理访问的编译器。它进行名称和类型分析(参见 SemanticAnalysis.scala)并生成 JVM 字节码。语义分析使用一个简单的模型,将环境从声明传递到名称的使用。如果您对示例的工作方式有任何疑问,请随时在此处或 Kiama 邮件列表中与我们联系。
Oberon-0 示例也是一个从命令式语言到 C 的完整编译器,包括语义分析。