A. 为什么没有国产的C/C++的编译器
首先:国产有编译器,比如龙芯就用
其次:开发编译器难度非常大,编译器、操作系统、数据库这三样是程序界的三座大山,不是 所有牛奶都叫愚公。国产即使有编译器我认为也不是完全从零开发的。龙芯虽然有了自己的编译器也只是针对自己的平台编译,不具备通用性。一句话,中国目前缺少大企业的眼光和决心以及实力
B. 中国自主的编译器,如汇编生成机器码,含各种符号表,
中国自主的编译器,你是说"易语言"的编译器吗?
http://ke..com/link?url=LsUrEixvHx5_bRvMoHMl5TdX-UTcs8gbpB6p__
http://www.dywt.com.cn/texing/zybyq.htm
C. 编译器的发展史
编译器编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Sourcenbsp;program)作为输入,翻译产生使用目标语言(Targetnbsp;language)的等价程序。源程序一般为高级语言(High-levelnbsp;language),如Pascal,C++等,而目标语言则是汇编语言或目标机器的目标代码(Objectnbsp;code),有时也称作机器代码(Machinenbsp;code)。一个现代编译器的主要工作流程如下:源程序(sourcenbsp;code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(objectnbsp;code)→连接器(链接器,Linker)→可执行程序(executables)nbsp;目录nbsp;[隐藏]1nbsp;工作原理nbsp;2nbsp;编译器种类nbsp;3nbsp;预处理器(preprocessor)nbsp;4nbsp;编译器前端(frontend)nbsp;5nbsp;编译器后端(backend)nbsp;6nbsp;编译语言与解释语言对比nbsp;7nbsp;历史nbsp;8nbsp;参见nbsp;工作原理翻译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。编译器种类编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如:nbsp;自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。预处理器(preprocessor)作用是通过代入预定义等程序段将源程序补充完整。编译器前端(frontend)前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句nbsp;,函数等等。nbsp;例如“anbsp;=nbsp;bnbsp;+nbsp;c;”前端词法分析器看到的是“a,nbsp;=,nbsp;bnbsp;,nbsp;+,nbsp;c;”,语法分析器按定义的语法,先把他们组装成表达式“bnbsp;+nbsp;c”,再组装成“anbsp;=nbsp;bnbsp;+nbsp;c”的语句。nbsp;前端还负责语义(semanticnbsp;checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstractnbsp;syntaxnbsp;tree,或nbsp;AST),这样后端可以在此基础上进一步优化,处理。编译器后端(backend)编译器后端主要负责分析,优化中间代码(Intermediatenbsp;representation)以及生成机器代码(Codenbsp;Generation)。一般说来所有的编译器分析,优化,变型都可以分成两大类:nbsp;函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。编译器分析(compilernbsp;analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizingnbsp;compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(highnbsp;levelnbsp;IR)接近输入的源程序的格式,与输入语言相关(languagenbsp;dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle
D. 很奇怪为什么国内没有任何组织或个人开发最底层的中文编译器呢
这是一个技术问题,你如果没读过编译原理(龙书)的话,你是看不懂下面的回答的。因为中国技术不足,没人能写出支持中文的lex和yacc。首先词法分析生成器lex,就对中文不友好,它只支持ascii字母,不支持中文。这意味着你编译器里的词汇只能是英文单词,不能是中文词汇。其次就是语法分析生成器yacc了,也不支持中文,只支持用英文写的语法规则,不能用中文书写。这意味着最最基本的语法规则是全英文的,这算哪门子中文编程语言。非常遗憾,中国目前没有牛人造出支持中文的lex和yacc来,否则全中文编译器一定会满天飞的,多到烂大街。为什么说多到烂大街?一个全中文的编译器其实仅仅需要修改编译器的前端词法分析器和语法分析器(语法分析器甚至无需大改动),后端直接对接开源代码即可,开源英文编译器已经烂大街了,把它们的后端移植过来就行了。但关键就是没有支持中文的自动化工具lex和yacc。
自动化这条路走不通,纯手写总可以吧。我猜测易语言就是前端纯手写的全中文编译器。你可以使用易语言,绝对可以达到你的要求。但是从技术的角度来讲,lex和yacc的技术高度远高于易语言,毕竟lex和yacc号称编译器的编译器,编译器之母。
E. 中国为什么不做编译器和编程语言
中文的也有,比如易语言。
不开发中文代码编程原因很多,比如:
1、语言规范制定比较困难;
2、操作系统,编译器大都是外国人基于英文做的;
3、因为英语是世界上用的最广泛的语言,相对来说中文则不够通用,不利于国际交流合作
F. 在国内从事C/C++编译器的开发有发展前景吗
我给你讲讲我的经历。 我大概十年工作经验,大概五年c++编译器前端经验(在两家500强做静态分析),四五年项目管理和品质过程改善经验。其他主流语言都会用,实现的大概方式也明白。 前一段时间找工作,投了二十几个c++职位一个电话都没有。唯一的面试是朋友内推的阿里的项目管理专家。跑去面试,悲催,直接换岗成p5-p6的测试来面试,问了几个测试问题直接让我回家了(顺便吐槽一下,他们对于测试过程感觉还没问到点上) 最后的结局就是,没人要,转行去制造加工业了。我总结一下为什么找不到工作(可能只是我偏颇的认识:一是这行需求太少,二是hr根本不知道你是干嘛的,三是做这行的根本不好意思写精通c++。
G. 目前的编译程序如何开发
用脚本开发就行。
编译程序(Compiler,compiling program),也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。
它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。编译程序的基本功能是把源程序(高级语言)翻译成目标程序。
但是,作为一个具有实际应用价值的编译系统,除了基本功能之外,还应具备语法检查、调试措施、修改手段、覆盖处理、目标程序优化、不同语言合用以及人-机联系等重要功能。语法检查:检查源程序是否合乎语法。
如果不符合语法,编译程序要指出语法错误的部位、性质和有关信息。编译程序应使用户一次上机,能够尽可能多地查出错误。
以上内容参考:网络-编译程序
H. 编译器是什么意思,是做什么的
编译器
编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。这时我程序把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。
下面我们看看它是如何工作的。首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,我们也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候我们需要把多个文件产生的目标文件进行链接,产生最后的代码。我们把一过程称为交叉链接。
有一个称为LCC的编译器,还挺不错的;还有一个用于分析其规则的小工具;
I. 综合来说,几大主流C++编译器(icc,gcc,clang,vc++等)究竟孰优孰劣
我曾编出各种C++ 11编译器的支持,并有C++ 14编译器支持一批。
对VC编译的速度不断提高,内存占用已经从VC12开始明显提高,而最明显的是可变参数模板。还有内置的代码静态分析,在实际中很有用。32位保护模式下,ss寄存器存的是一个段选择子,选择子是一个数字,通过IDT(局部描述符表)或者GDT(全局描述符表)选择一个段描述符,描述符里面的信息包含该段的取值范围和大小。
vc14的静态分析不在每次载入一个ie(对,以前每分析一个.cpp,就载入一次ie!),速度快了相当多。
J. 习语言作为国产编译器,能直接编译c代码,完全兼容c,为啥很多会点c的人要排斥它呢
ANSIC一般都可以支持,但也涉及到不同版本的C标准的兼容性问题,比如VC6不支持C99,VS2003,2005,2008,20120等就可以部分支持C99标准;而且很多标准并没有规定实现,不同的编译器实现可能不同,比如C标准只规定了short<=int<=long,但并没有规定字节数,导致不同的编译器数据类型的大小各不相同。非ANSIC标准的话,不同的编译器一般都有不同的实现,需要分别实现。在移植到不同编译器的时候这些都要注意处理,比较常规的做法是数据类型和函数等自己根据不同编译器封装成一个统一的格式,在程序中使用封装后的数据类型或函数,而不要使用原生类型,这样在移植时只需要在封装的地方根据编译器的不同进行修改就可以了,不需要再修改源代码。