面向语言编程的元关系

时间:2010-09-17 22:36:49

标签: compiler-construction metaprogramming language-design dsl

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

我的意思是某种元语言关系或类似关系。有关此主题的更多信息的任何想法或建议?请随意重新解释我的问题以获得一些清晰度。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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

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

可用于此目的的两种工具具有不同程度的有效性ANTLRDMS Software Reengineering Toolkit

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