Edison Design Group提供解析计算机编程语言的技术,其前端(front end)产品读取源代码并生成完全描述代码结构和含义的信息。基于这些信息,用户加入自己的软件来创建编译器、源代码分析工具和芯片设计应用程序,
EDG C++前端于1992年首次发布,支持ISO/IEC 14882 standard。 完全支持C++17, C++14、C++11和 C++98/03版本的语言,C++20 语言特性的支持正在开发中。在命令行选项的控制下,前端也支持ANSI/ISO C ( C89和C99、Embedded C TR)、Microsoft C和C++的方言(包括C++/CLI)、GNU C和C++、Clang C和C++、Sun C++、cfront 2.1和3.0.n的C++方言以及K&R/pcc C.
前端执行包括全部错误检查在内复杂的语法和语义分析,可以产生大约2500个不同的错误诊断,它们出现在源代码行中,并以“^”号指示精确的错误位置。诊断的级别可以通过多种方式控制。
对源代码中的字符串、标识符、注释和文件名字,前端能够识别国际字符集,包括多字节字符和多种Unicode编码。前端做出的诊断可以收进错误消息目录中,后者可轻易转译为其他语言。
前端把源程序翻译为高层的、树结构的、驻留于内存的中间语言,它保留了大量的源信息(如代码行号、列号、原始类型、原始名称),有助于产生符号化的调试信息。源程序中的隐式和重载操作在中间语言中变成显式操作,对结构无添加、删除或重排序的工作。中间语言不依赖机器的(如,不指定寄存器,也不描述栈的布局)。前端还可选择性地产生原始的交叉索引,这可作为源程序浏览工具的基础。
前端集成了一个预处理器,执行现代的或pcc风格的预处理。一般来说,预处理器作为前端的一部分来运行,不会产生其他的中间文本文件。然而必要时可以产生预处理的输出文件。可以创建并使用预编译头文件。
EDG C++还包括以下组件:
●C后端(back end),用于为C++程序产生C代码
●C++后端,用于源文件-源文件之间的转换应用
●预链接器,处理自动的模板实例化
●最小的运行时库(不是任何“实际”的库,比如流I/O)
●实用程序,在中间语言和文件之间双向读写,显示为可读格式
●名还原工具(name demangler)
前端由大约536,000行源代码构成,其中30%为注释。代码是用ANSI/ISO C编写的,并谨慎保持代码的平台独立性,能够方便地在不同的机器和操作系统中重用。既然主机和目标机依赖是单独配置的,前端就可作为交叉编译器的部分而使用。代码中含有大量调试信息和一致性检查,可以通过条件编译对它们进行包含和排除。
内部文档共600多页,外部接口章节包含命令行选项、语言方言问题以及语言特性例如模板的使用,可以免费下载pdf版本。
支持的语言特性
下面信息反映的是2018年八月发布的C++前端分析器的5.0版本,
前端可以接受由ISO/IEC 14882:2017 ("C++17")标准(可以配置成支持早期版本,即, ISO/IEC 14882:2003, ISO/IEC 14882:2011, 和ISO/IEC 14882:2014)定义的C++语言。也接受ISO/IEC 9899:2011 ("C11") ISO/IEC 9899:1999 ("C99")和 ISO/IEC 9899:1990 ("C89")标准定义的C语言以及 ISO/IEC TR 18037定义的 "嵌入式 C"的扩展。
值得重点说明的是,EDG前端支持完整的C++2017标准。C++的复杂性使多数编译器省略了它的一部分,而那些少数支持完整语言的编译器都建立在EDG前端基础之上。随着C++和C标准的更新,EDG前端也将持续更新,以保证完全支持新的语言特性。
然而现实世界中,任何程序都很难完全遵循C++或C标准。EDG前端的“严格”标准模式对运行测试套件是有用的,有助于检查程序中没有非标准的用法,只是显得有些过于学究气。所以,前端也提供了针对C++和C的更为宽松的默认模式,以及对多数流行编译器的兼容模式:
●Microsoft C和C++兼容模式
提供Microsoft Visual C++ 编译器所支持的扩展(目前到Visual Studio 2017包括C++/CLI特性),和多种未经文档化的特性和bug。
●GNU C和C++兼容模式
支持GCC(版本3.2-7.3)的语言扩展,和多种未经文档化的特性和bug。兼容性足够强大到可以编译Linux核及其工具。
●Clang C和C++兼容模式
●Sun C++兼容模式
●cfront兼容模式,模拟早期的AT&T cfront处理器。
EDG C++前端
● 根据适当的编译选项,识别多种非标准的C++和C的方言,尤其是Microsoft C++和C、GNU C++和C、以及K&R C。
● EDG C++前端在集成了预处理的Single Pass过程中完成转换,具有对应的选项指定只进行预处理,输出预处理后的源码。
● EDG C++前端把C++或C源代码翻译为高度的树结构的内存中间语言,包含源的一致性信息。
● EDG C++前端执行错误检查,提供包含错误位置在内的错误信息,最小化错误信息的层叠。
● EDG C++前端是用C的一种可移植方言编写的,主机和目标机的特性在代码中分隔开来。
● EDG C++前端在条件编译指令的控制下有选择地包含对代码的调试和断言检查。
● EDG C++前端不含C++或C的库的源代码或目标码,除了IL底层与C生成后端所需的最小的运行时库。
● EDG C++前端对浮点的支持(包括浮点转换和浮点常数运算的折叠)使用ISO C语言中的可移植技术。
● EDG C++前端中任何与日期相关的处理对闰年、新的百年、新千年都功能正确。
● 产品全部以源码形式提供。