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/

词法语法分析器EDG C++相关推荐

  1. 基于flex/bison工具生成sysY2022文法的词法/语法分析器

    基于flex/bison工具生成sysY2022文法的词法/语法分析器 本文内容学习借鉴了往届参赛的优秀校友学长学姐的开源作品代码,仅用于学习目的,现分享给大家,如有侵权请联系我删除.我使用的开发环境 ...

  2. 构造可配置词法语法分析器生成器(上)

    本文为笔者原创,转载请注明出处 http://blog.csdn.net/xinghongduo 前言 源程序在被编译为目标程序需要经过如下6个过程:词法分析,语法分析,语义分析,中间代码生成,代码优 ...

  3. 小白天堂之编写词法语法分析器何其简单(一)

    写小白天堂系列的文章算是从这一篇开始吧,但是写这个词法语法分析器实在是因为编译原理老师扣啊,哎,没办法,只能直接写代码,当时正好将Javascript的语法基本撸了一边,所以就决定写一个JS的词法语法 ...

  4. toadb 词法/语法分析器基础 【保姆级教程】

    系列文章目录 目录 系列文章目录 前言 词法分析与语法分析的关系 重要的工具 flex的介绍

  5. 开源语法分析器--ANTLR

    开源语法分析器--ANTLR 序言 有的时候,我还真是怀疑过上本科时候学的那些原理课究竟是不是在浪费时间.比方学完操作系统原理之后我们并不能自己动手实现一个操作系统:学完数据库原理我们也不能弄出个像样 ...

  6. java语言生成语法分析_语法分析器自动生成工具一览

    最近打算重做以前的一个留下遗憾的工作,当中的一项小任务就是要求编写一个简易SQL语言的语法分析器. 本科的<编译原理>课程依稀在我脑中留下些许映象.当初的课程大作业是写一个叫Dicuf(貌 ...

  7. 编译原理课程作业-Cminus语言的词法及语法分析器实现

    Cminus Compiler 编译原理课程作业-Cminus语言的词法及语法分析器实现 设计思想 词法分析 使用确定有限态自动机(DFA)实现与Lex自动分析两种方式实现. 语法分析 使用递归下降方 ...

  8. 《编译原理》实验报告——基于YACC的TINY语法分析器的构建

    一.实验要求 运用YACC,针对TINY语言,构造一个语法分析器.给出实验方案,实施并描述结果. 二.实验方案 (1)设计基于LEX的TINY词法分析器 (2)设计基于YACC的TINY语法分析器 ( ...

  9. java实现语法分析器_200 行 JS 代码,带你实现代码编译器

    一.前言 对于前端同学来说,编译器可能适合神奇的魔盒 ,表面普通,但常常给我们惊喜. 编译器,顾名思义,用来编译,编译什么呢?当然是编译代码咯 . 其实我们也经常接触到编译器的使用场景: React ...

  10. c语言语法分析源程序,深入浅出编译原理-5-一个简单语法分析器的C语言实现

    引言 前面已经介绍了编译器的预处理,词法分析,词法分析器的实现,也在其中说到了语法分析的任务和过程. 语法分析的输入是词法单元序列,然后根据语言的文法表示(展开式),利用有限状态机理论,生成抽象语法树 ...

最新文章

  1. Rust 数据类型介绍
  2. 洛谷4147:玉蟾宫——题解
  3. 一个完整的Core Data应用
  4. 实用JavaScript网页特效编程百宝箱pdf
  5. python 响应代码_Python HTTP响应
  6. Self-Supervised Curriculum Learning for Spelling Error Correction
  7. Linux之centos7 VMware安装教程
  8. 【BZOJ】3436: 小K的农场
  9. 2019校招开发岗面试题总结(Java后台开发)
  10. 互联网金融一:大额支付系统、小额支付系统介绍
  11. 软件测试工程师面试如何做好自我介绍?月薪30k大鸟教你回答
  12. ubuntu固定内网ip_Ubuntu14设置局域网固定IP
  13. 简历javaweb项目描述怎么写_JavaWeb开发简历项目经验怎么写
  14. HDOJ-----5773The All-purpose Zero(LIS)
  15. 如何实现话费充值api接口?详细讲解源码
  16. undefined method `devise' for User(Table doesn't exist):Class解决方法
  17. 计算机工程学院迎新生,计算机工程学院举办“青春相约,梦想同行”迎新晚会...
  18. 一款Excel导入导出解决方案组成的轻量级开源组件
  19. python Stark 组件
  20. kdj值应用口诀_KDJ应用口诀,一文教你巧妙利用KDJ买卖股票

热门文章

  1. java满天星星代码_纯Java代码实现流星划过天空
  2. 2022-2028年全球与中国马铃薯淀粉生产线行业发展趋势及竞争策略研究
  3. scandef格式详细说明
  4. python矩阵运算函数_Numpy 常用矩阵计算函数
  5. git stash drop 误删恢复
  6. 基于ssm的网上问卷调查系统的实现与设计
  7. 星际争霸II对抗 PYSC2平台 深度强化学习 学习笔记(一)- 环境搭建
  8. 闲鱼商品理解数据分析平台——龙宫
  9. 【回溯】有蹩脚的马踏棋盘——思路巨清晰!!!
  10. Python 并发编程