【问题标题】:Meta-relationships on language-oriented programming面向语言编程的元关系
【发布时间】:2010-09-17 22:36:49
【问题描述】:

在开发一门新语言的过程中。如何将“LALR 解析器”、“抽象语法树”、“上下文无关语法”等“高级”概念与特定语法规则“A -> B”等其他“低级”概念联系起来.

我的意思是某种元语言关系,或类似的。有什么想法或建议可以查看有关此主题的更多信息?请随时改写我的问题以澄清问题。

任何帮助将不胜感激。

【问题讨论】:

  • 我不确定我是否理解,您正在寻找您的语法产品和解析器之类的东西之间的联系?它非常广泛,你能缩小你的问题吗?例如,LALR 解析器的一般工作原理等。我可以顺便推荐这本书 en.wikipedia.org/wiki/Dragon_Book_(computer_science) 非常好,并且易于理解。也许你已经有类似的东西了?
  • 这个问题相当晦涩,也许有几个例子可以说明一些问题。作为关系,我说的是(在 OOP 的上下文中)这样的关系: - LALR 解析器从“抽象”解析器“继承” - MyParser “实现” LALR 解析器 - MyParser “识别” MyGrammar - MyGrammar “组合”通过一组“描述”我的商业语言的规则。尝试将我的业务的这些概念与将其描述为领域特定语言的元素联系起来是否有意义?非常感谢您抽出宝贵时间和参考书。

标签: compiler-construction metaprogramming language-design dsl


【解决方案1】:

通常,这些实体(语法规则、解析器、AST)具有概念上的关系,如 Dragon 编译器书籍(已在评论中提到)等书籍所捕获的。 在设计新语言时,我认为这些关系不是很有趣。你真正关心的是语言的语法(通常表示为 具有附加约束的“无上下文”语法,以及语言的语义(通常表示为非常大的参考文档,有时以可以解释魔术产生的抽象解析树的正式符号表示,例如 denotational semantics

当你有将它们联系在一起的机器时,“真实”关系就会出现:如果我将语法 A 提供给解析器生成器 B,并使用结果来处理源代码 S,我可能会得到 AST T。 在这个级别上,你不是在设计你的语言,而是在实施它。您在这里需要的是一套用于处理您的语言定义的集成工具; 理想情况下,它将直接接受您的语法和语义符号。我所知道的理想情况下没有任何实用的工具,所以你必须在那些确实存在的工具中进行选择。

ANTLR 和我的DMS Software Reengineering Toolkit 是可以用于此不同程度有效性的两个工具。

DMS 提供了至少一种定义语义的方法,即通过提供写下语言形式之间等价的“代数”定律的方法。本质上,你可以说 这种语言形式 等价于 那种语言形式 写成 pattern1 = pattern2 就像你做代数。你可以看到这是如何做到的using algebra as an example

【讨论】:

  • 我一直在研究的一个工具可以做类似的事情:metasharp.codeplex.com
  • 您好,非常感谢您的详细回复。我一直在详细查看您发送给我的链接,并澄清了一些疑问。我认为你在第二段中达到了目标。但是,如果上下文是开发语言的重用,比如说对于类似的领域,你认为这样的工具会有用吗?
  • ANTLR 和 DMS 非常适合定义/处理“已开发”语言(文献中有详细记载的语言)和构建新语言。
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多