词法语法分析器EDG C++

EDG C++简介

EDG C++前端(front end)于1992年首次发布,支持ISO/IEC 14882:2003的C++。通过调整命令行参数,前端还可以支持ANSI/ISO C(包括C89和C99以及Embedded C TR)、Microsoft C/C++、GNU C/C++、Sun C++、C++的cfront 2.1和3.0.n版本方言、以及K&R/pcc C等方言。

前端执行包括全部错误检查(error checking)在内的完整的语法和语义分析,可以形成大约2100个不同的错误诊断,它们出现在源代码行中,并以“^”号指示精确的错误位置。诊断形成的程度可以通过多种方式控制。

对源代码中的字符串、标识符、注释和文件名字,前端能够识别国际字符集,包括多字节字符和多种Unicode编码。前端做出的诊断可以收进错误消息目录中,后者可轻易转译为其他语言。

前端把源程序翻译为高层的、带有树结构的、驻留于内存的中间语言,它保留了大量的源信息(如代码行号、列号、原始类型、原始名称),有助于产生符号化的调试信息。源程序中的隐式和重载操作在中间语言中变成显式操作,也没有对结构进行添加、删除或重排序的工作。中间语言不是机器依赖的(如,不指定寄存器,也不描述栈的布局)。前端还可选择性地产生原始的交叉索引,这可作为源程序浏览工具的基础。

前端集成了一个预处理器,执行现代的或pcc风格的预处理。一般来说,预处理器作为前端的一部分来运行,不会产生其他的中间文本文件。然而必要时可以产生预处理的输出文件。可以创建并使用预编译头文件。

EDG C++还包括以下组件:
● C后端(back end),用于为C++程序产生C代码
● C++后端,用于源文件-源文件之间的转换应用
● 预链接器,处理自动的模板实例化
● 最小的运行时库(不是任何“实际”的库,比如流I/O)
● 实用程序,在中间语言和文件之间双向读写,显示为可读格式
● 名还原工具(name demangler)

前端由大约536,000行源代码构成,其中30%为注释。代码是用ANSI/ISO C编写的,并谨慎保持代码的平台独立性,能够方便地在不同的机器和操作系统中重用。既然主机和目标机依赖是单独配置的,前端就可作为交叉编译器的部分而使用。代码中含有大量调试信息和一致性检查,可以通过条件编译对它们进行包含和排除。

支持的C++和C语言特性
下面的信息反映的是2011年3月发布的版本4.3的C++前端。
前端可以识别的语言:
1)C++,根据ISO/IEC 14882:2003标准定义的
2)C89,根据ISO/IEC 9899:1990标准定义的
3)C99,根据ISO/IEC 9899:1999标准定义的
4)Embedded C,是ISO/IEC TR 18037扩展

值得重点说明的是,EDG前端支持完整的C++2003标准。C++的复杂性使多数编译器省略了它的一部分,而那些少数支持完整语言的编译器都建立在EDG前端基础之上。随着C++和C标准的更新,EDG前端也将持续更新,以保证完全支持新的语言特性。

对C++0x标准,前端已经增加了一些新的特性:
● static_assert
● 声明中的auto类型
● 右值(rvalue)引用
● 别名模板
● 可变参数模板
● decltype
● 选中的枚举(scoped enum)
● defaulted和deleted函数
● nullptr
● 函数的trailing-return-type
● 拉姆达表达式(lambda expression)
● 用于模板推导的新类型SFINAE
● 标准属性,比如[[noreturn]]

然而现实世界中,任何程序都很难完全遵循C++或C标准。EDG前端的“严格”标准模式对运行测试套件是有用的,有助于检查程序中没有非标准的用法,只是显得有些过于学究气。所以,前端也提供了针对C++和C的更为放松的默认模式,以及对多数流行编译器的兼容模式:

● Microsoft C和C++兼容模式
支持Microsoft C++编译器(直到版本10.0,除了Managed C++扩展)的语言扩展,和多种未经文档化的特性和bug。

● GNU C和C++兼容模式
支持GCC(版本3.2-4.2,以及4.3和4.4中的某些特性)的语言扩展,和多种未经文档化的特性和bug。这个兼容性非常好,可以编译Linux核。

● Sun C++兼容模式
● cfront兼容模式,模拟早期的AT&T cfront处理器。

\ 功能特性

EDG C++前端
● 支持ISO/IEC 14882:2003标准定义的C++语言。
● 根据适当的编译选项,识别ISO/IEC 9899-1990和ISO/IEC 9899-1999标准定义的C语言。
● 根据适当的编译选项,识别多种非标准的C++和C的方言,尤其是Microsoft C++和C、GNU C++和C、以及K&R C。EDG C++前端提供的非标准方言仿真模型只是近似表示所仿真语言的方言、扩展和缺陷,EDG不能表现所有的它能接收的非标准方言的所有语言特性、扩展或者缺陷。
● 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++前端运行的主机环境提供了合适的非标准浮点库,那么它对浮点的支持可转为使用这些库。然而EDG本身不负责如此修改。
● EDG C++前端中任何与日期相关的处理对闰年、新的百年、新千年都功能正确。

EDG Fortran前端
● 支持ANSI X3.0-1978定义的ANSI Fortran 77语言。
● 前端还可支持:
■ MIL-STD-1753中的扩展:“INCLUDE”、“DO WHILE”、“END DO”、16进制和8进制常量、位操作本征(intrinsics)以及“IMPLICIT NONE”。
■ 长标识符名字(至少128位)以及“$”和“_”字符。
■ 以“!”开始的注释。
■ 输入行中的Tab。
■ 自由格式(free-form)的Fortran 90 Draft。
■ 以字母“D”位于第一列的条件编译调试行。
■ 不同大小的数据类型和函数(如INTEGER2、INTEGER4、INTEGER8、REAL4、REAL8、REAL16、COMPLEX*32)。
■ Cray Fortran中的指针。
■ VAX Fortran允许的8进制和16进制常量格式。
■ 可选的单次(one-trip)“DO”循环。
■ 以“END DO”关闭的没有结束语句的“DO”。
■ 格式规范中的“O”和“Z”编辑描述符和缺省的域宽度。
■ 散布的DATA语句。
■ Hollerith常量以及ANSI Fortran 77标准附录C中的Hollerith特征。
■ “ENCODE”和“DECODE”语句。
■ “NAMELIST”语句和NAMELIST I/O。
● EDG Fortran前端把Fortran源代码翻译为高度的树结构的内存中间语言,包含源的一致性信息。
● EDG Fortran前端执行错误检查,提供包含错误位置在内的错误信息,最小化错误信息的层叠。
● EDG Fortran前端是用C的一种可移植方言编写的,主机和目标机的特性在代码中分隔开来。
● EDG Fortran前端在条件编译指令的控制下有选择地包含对代码的调试和断言检查。
● EDG Fortran前端不含标准Fortran库的源代码或目标码。
● EDG Fortran前端对浮点的支持(包括浮点转换和浮点常数运算的折叠)使用ISO C语言中的可移植技术。因此,其准确性与检测上溢和下溢的能力也许不适合于生产力产品。如果EDG Fortran前端运行的主机环境提供了合适的非标准浮点库,那么它对浮点的支持可转为使用这些库。然而EDG本身不负责如此修改。

\ 典型应用

EDG前端的用户是那些想开发编译器或源代码分析工具的公司、计算机厂商、芯片商、以及软件工具开发商。下面为部分客户清单:
ACE Associated Compiler Experts bv
Analog Devices
ARM Ltd.
Comeau Computing
Concurrent Computer
Cray Inc.
Fujitsu Siemens Computers
Green Hills Software
IAR Systems
Keil Software
Mainsoft
Mentor Graphics
Parasoft
PolySpace Technologies
Progress Software
SCO
Texas Instruments
Vector Software
Wind River Systems, Inc.
SN Systems (Sony Computer Entertainment Group)

更多详情访问:http://www.softtest.cn/

你可能感兴趣的:(开发建模,开发建模)