编译器,如 Visual Basic 和 C# (显着 C 清晰度),面向公共语言运行 (CLR)时,生成 Microsoft 中间语言 (msil),稍后编译为本机代码。 CLR 提供一个调试引擎 (DE)调试生成的代码。 如果计划集成这种所有权编程语言 Visual Studio IDE 中,可以选择编译为 MSIL 并且不必编写拥有 DE。 但是,您必须编写能够计算表达式在这种编程语言的上下文内的表达式计算器 (EE)。
讨论
计算机语言表达式通常分析生产设置数据对象和设置运算符用于操作它们。 例如,表达式 “A+B”可能已分析应用加号 (+) 于数据对象 “A”和 “B”,可能会导致另一个数据对象。 将总价设置数据对象,运算符及其关联在程序通常表示为树,使用该树中的节点的运算符以及在分支的数据对象。 已分解为树形式的表达式通常称为一个分析的树。
对于表达式分析,符号提供程序调用计算 (SP)每个数据对象。 例如,在中,如果 “A”是在中定义的任何多个方案,然后的问题 “?”必须在中之前的值答案可以确定。 SP 返回的答案类似于 “在第五堆栈帧”或 “是在静态内存开始之外的 50 个字节分配给此方法的第三个项目”。
除了生产程序的 MSIL 外, CLR 编译器也可能导致非常将写入程序数据库的声明性调试信息 (.pdb) 文件。 只要所有权语言编译器生成调试信息的格式与 CLR 编译器, CLR 的 SP 可以识别语言的命名数据对象。 对于命名数据对象中标识, EE 使用一联编程序关联的对象 (或) 绑定到表示该对象值的内存区域的数据对象。 DE 可以获取或设置数据对象的新值。
一个所有权编译器可以通过调用在命名空间 System.Diagnostics.SymbolStore) 的 .NET framework 中定义的 ISymbolWriter 接口提供 CLR 调试信息 (。 通过编译为 MSIL 和写入请通过这些接口调试信息,则所有权编译器可以使用 CLR、和 SP。 这大大简化集成一种所有权语言到 Visual Studio IDE。
当 CLR DE 调用所有权 EE 计算表达式时, DE 将接口提供 EE 到 SP 和联编程序对象。 因此,编写基于 CLR 的调试引擎来表示仅实现相应的表达式计算器接口是必需的;CLR 进程为负责绑定和符号。