语义分析的语言?

时间:2009-09-13 07:45:15

标签: compiler-construction automation static-analysis semantics

背景: - 有表达编程语言有效词典和语法的正式语言 - 这些表示(例如正则表达式和无上下文语法)可以使用某些工具(例如LEX和YACC)自动编译成某些编程语言的词典/语法分析器

问题: - 是否有用于定义编程语言语义的正式语言? - 是否有编译器根据这些正式语言自动生成语义分析器的代码? - 有关源代码语义分析的任何资源?

注释: - 你可能会发现我的问题不切实际,没关系......我是编译器的新手? - 通过语义分析,我的意思是从源代码中收集必要的信息,用于代码优化和生成的下一步......这应该包括类型/边界检查......等等。

我希望我能说清楚 非常感谢提前

4 个答案:

答案 0 :(得分:3)

有许多用于编程语言语义的正式语言 - 请查看wikipedia entry以获取更多谷歌术语。在我早期的职业生涯中,我做了少量Z(与正式方法wiki的链接是另一个可以开始探索的地方)。我建议在lambda the ultimate论坛上询问,因为那里的人使用其中的一些,并且可以建议您使用的内容用于任何用例; this paper似乎与您在生成编译器方面的要求有些相关 - 您需要语言的语义和目标机器的描述来创建编译器。

答案 1 :(得分:2)

有许多方案可用于定义编程语言的语义: 指称语义(将语法映射到计算程序状态的函数); 操作语义(相当于为您的语言构建解释器), 转换语义(相当于将你的语言翻译成另一种语言) 已经存在其他语义的语言等等。

目前很少有人能够使用可用于实际编程语言的系统。这里的其他答案之一表明Centaur是一个尝试这样做的系统。 Peter Mosses的Action semantics 是近期最严重的尝试之一。

对于真实系统,目前最有效的方法是更有效。 这些包括词汇和语法语法可以有效的系统 定义(作为LEX和YACC的变体),并自动构建树。 属性语法允许指定树上的计算, 允许人们定义某种分析,例如符号表 建设或指标(技术上你可以 以这种方式做指称语义)。大多数传统语言(C,Java,C#, COBOL,......)在控制流和控制流方面都有相对相似的结构 数据流,因此可以构建通用的流分析例程 允许人们推理这种标准语言。

最后,您需要一个用于语义分析的目的:什么是事实 你想提取什么?可用的静态分析 系统具有混合模式驱动/过程代码方法 收集感兴趣的语法,符号表和流程事实 计算特定问题的具体答案。

某些系统允许用户携带此语义信息 源代码修改。

遵循上述更多临时方法的一个系统是我们的 DMS Software Reengineering Toolkit,它也具有通用的语义定义 (语法,符号表,数据流anlaysis)为真实完成 Java,C,C ++和COBOL等语言。 DMS可以申请 源到源的转换到ASTs条件 通过各种事实收集程序,这使大众 以可靠的方式转换代码。

答案 2 :(得分:1)

专门针对静态分析,请查看http://rw4.cs.uni-sb.de/~martin/pag/

答案 3 :(得分:0)

您所描述的正是Centaur项目的内容:

http://www-sop.inria.fr/croap/centaur/centaur.html

事实上,你可以在很远的地方描述语言的语义,以至于系统能够为你提供该语言的解释器(就在你完全描述语义的时候)。但你不必一路走下去。你可以做更少的描述工作,并且仍然可以获得结构化的编辑器和类型检查器。

虽然该项目的工作已经停止(据我所知), 您可以在链接中找到有趣的文章并下载。

相关问题