-
06-07-2019 - |
题
背景: - 有表达编程语言有效词典和语法的正式语言 - 这些表示(例如正则表达式和无上下文语法)可以使用某些工具(例如LEX和YACC)自动编译成某些编程语言的词典/语法分析器
问题: - 是否有用于定义编程语言语义的正式语言? - 是否有编译器根据这些正式语言自动生成语义分析器的代码? - 有关源代码语义分析的任何资源?
注释: - 你可能会发现我的问题不现实,没关系......我是编译器的新手? - 通过语义分析,我的意思是从源代码中收集必要的信息,用于代码优化和生成的下一步......这应该包括类型/边界检查......等等。
我希望我能说清楚 非常感谢提前
解决方案
有许多方案可用于定义编程语言的语义: 指称语义(将语法映射到计算程序状态的函数); 操作语义(相当于为您的语言构建解释器), 转换语义(相当于将你的语言翻译成另一种语言) 已经存在其他语义的语言等等。
目前很少有人能够使用可用于实际编程语言的系统。这里的其他答案之一表明Centaur是一个尝试这样做的系统。 Peter Mosses的行动语义是近期最严重的尝试之一。
对于真实系统,目前最有效的方法是更有效。 这些包括词汇和语法语法可以有效的系统 定义(作为LEX和YACC的变体),并自动构建树。 属性语法允许指定树上的计算, 允许人们定义某种分析,例如符号表 建设或指标(技术上你可以 以这种方式做指称语义)。大多数传统语言(C,Java,C#, COBOL,......)在控制流和控制流方面都有相对相似的结构 数据流,因此可以构建通用的流分析例程 允许人们推理这种标准语言。
最后,您需要一个用于语义分析的目的:什么是事实 你想提取什么?可用的静态分析 系统具有混合模式驱动/过程代码方法 收集感兴趣的语法,符号表和流程事实 计算特定问题的具体答案。
某些系统允许用户携带此语义信息 源代码修改。
遵循上述更多临时方法的一个系统是我们的 DMS Software Reengineering Toolkit ,它还具有通用语义定义 (语法,符号表,数据流anlaysis)为真实完成 Java,C,C ++和COBOL等语言。 DMS可以申请 源到源的转换到ASTs条件 通过各种事实收集程序,这使大众 以可靠的方式转换代码。
其他提示
专门针对静态分析,请查看 http://rw4.cs。 uni-sb.de/~martin/pag/
您所描述的正是Centaur项目的内容:
http://www-sop.inria.fr/croap/centaur /centaur.html
事实上,你可以在很远的地方描述语言的语义,以至于系统能够为你提供该语言的解释器(就在你完全描述语义的时候)。但你不必一路走下去。你可以做更少的描述工作,并且仍然可以获得结构化的编辑器和类型检查器。
虽然该项目的工作已经停止(据我所知), 您可以在链接中找到有趣的文章并下载。