编程编译器分类
A. C++的编译器都有哪些
kDevelop、Anjuta、Code Blocks、Visual Mingw、Ideone、Eclipse CDT、Compilr、Code Lite、Netbeans C++、DevC++。
B. C++缂栬疟鍣ㄦ湁鍝浜涳纻
1銆乬cc
GCC锛圙NU Compiler Collection锛孏NU缂栬疟鍣ㄥ椾欢锛夋槸鐢盙NU寮鍙戠殑缂栫▼璇瑷璇戝櫒銆侴NU缂栬疟鍣ㄥ椾欢鍖呮嫭C銆丆++銆 Objective-C銆 Fortran銆丣ava銆丄da鍜孏o璇瑷鍓岖锛屼篃鍖呯板敜𨰾浜呜繖浜涜瑷镄勫簱锛埚俵ibstdc++锛宭ibgcj绛夈傦级
GCC镄勫埯琛锋槸涓篏NU镎崭綔绯荤粺涓挞棬缂栧啓镄勪竴娆剧紪璇戝櫒銆侴NU绯荤粺鏄褰诲簳镄勮嚜鐢辫蒋浠躲傛ゅ勶纴钬滆嚜鐢扁濈殑钖涔夋槸瀹冨皧閲岖敤鎴风殑镊鐢便
2銆乴lvm+Clang
LLVM鏄鏋勬灦缂栬疟鍣(compiler)镄勬嗘灦绯荤粺锛屼互C++缂栧啓钥屾垚锛岀敤浜庝紭鍖栦互浠绘剰绋嫔簭璇瑷缂栧啓镄勭▼搴忕殑缂栬疟镞堕棿(compile-time)銆侀摼鎺ユ椂闂(link-time)銆佽繍琛屾椂闂(run-time)浠ュ强绌洪棽镞堕棿(idle-time)锛屽瑰紑鍙戣呬缭鎸佸紑鏀撅纴骞跺吋瀹瑰凡链夎剼链銆
LLVM璁″垝钖锷ㄤ簬2000骞达纴链鍒濈敱University of Illinois at Urbana-Champaign镄凛hris Lattner涓绘寔寮灞曘2006骞碈hris Lattner锷犵洘Apple Inc.骞惰嚧锷涗簬LLVM鍦ˋpple寮鍙戜綋绯讳腑镄勫簲鐢ㄣ侫pple涔熸槸LLVM璁$瑧楂桦嚡鍒掔殑涓昏佽祫锷╄呫
3銆乄atcom C/C++
Watcom C/C++ 缂栬疟鍣ㄣ乄atch Fortran 缂栬疟鍣 缁忓凡鍦ㄤ笉鍏跺厛鍓嶆墍灞炲叕鍙窼ybase鍞鍗, 钥岃 SciTech 杞浠跺叕鍙 浣滀负 Open Watcom 寮婧愬寘 鍙戣屻傜被浼间簬鍏朵粬镄 寮婧愮紪璇戝櫒(渚嫔 [GCC])椤圭洰锛学atcom C浠g爜灏忚屼究鎼猴纴 鍏剁紪璇戝櫒钖庣(浠g爜鐢熸垚鍣)镄勭洰镙囩爜鍙鍙樸
璇ョ紪璇戝櫒鍙鍦―OS銆丱S/2銆乄indows绛夋搷浣灭郴缁熶笂杩愯岋纴骞剁敓鎴愬悇绉嶅彲杩愯岀殑(涓嶅繀鏄璇ユ搷浣灭郴缁熺殑)浠g爜銆傝ョ紪璇戝櫒鏀鎸丯ovell NetWare镄 NLM 鐩镙囩爜銆傜洰鍓嶆h繘琛 涓 Linux銆乵odern BSD (渚嫔侳reeBSD) 镎崭綔绯荤粺 閲嶅畾鐩镙囩爜锛屼互渚垮湪 x86銆丳owerPC 鍙娿鍏跺畠澶勭悊鍣ㄤ笂杩愯屻
Open Watcom C/C++ 镄1.4鐗堜簬2005骞12链埚彂琛岋纴閲囩敤 Linux x86 涓哄疄楠岀洰镙, 鏀鎸丯T銆丱S/2绛塰ost骞冲彴镟炬湁镆愯寮幂疆镄凲NX鐗堟湰锛屼絾鍏剁紪璇戞墍椤荤殑搴揿苟链寮婧愬彂琛屻傚綋鍓嶆渶杩戠殑绋冲畾鐗堟槸1.9鐗堬纴鍦2010骞6链埚彂琛屻
4銆丏igital Mars
DigitalMars鏄涓娆鹃珮镐ц兘镄勭紪璇戝櫒锛屽姛鑳藉寘钖锛屽揩阃熺紪璇/阈炬帴镞躲佸己澶х殑浼桦寲鎶链銆丆ontract璁捐°佸畬鏁寸殑璧勬簮搴撱佹祻瑙圚TML鏂囨。锛屽弽蹇典贡姹囩紪銆佸簱銆佽祫婧愮紪璇戝櫒绛夈傚懡浠よ屽强GUI鐗堟湰銆佹暀绋嬨佷唬镰佺ず渚嬨佸湪绾挎洿鏂般佹爣鍑嗘ā𨱒垮簱绛夌瓑銆
5銆丮SVC绯诲垪
涓嵘isual Studio闆嗘垚鍙戝竷锛屽井杞镊宸辩殑缂栬疟鍣锛孷S鏄涓涓锘烘湰瀹屾暣镄勫紑鍙戝伐鍏烽泦锛屽畠鍖呮嫭浜嗘暣涓杞浠剁敓锻藉懆链熶腑镓闇瑕佺殑澶ч儴鍒嗗伐鍏凤纴濡俇ML宸ュ叿銆佷唬镰佺℃带宸ュ叿銆侀泦鎴愬紑鍙戠幆澧(IDE)绛夌瓑銆
镓鍐欑殑鐩镙囦唬镰侀傜敤浜庡井杞鏀鎸佺殑镓链夊钩鍙帮纴鍖呮嫭Microsoft Windows銆乄indows Mobile銆乄indows CE銆.NET Framework銆.NET Compact Framework鍜孧icrosoft Silverlight 鍙奥indows Phone銆
C. C璇瑷鍏ラ棬锛岀敤浠涔堢紪璇戝櫒姣旇缉濂斤纻
姝ュ叆C璇瑷镄勪笘鐣岋纴瀵绘垒浣犵殑链浣崇紪璇戝櫒涓嶪DE浼欎即
缂栫▼涔嬭矾濮嬩簬阃夋嫨锛屽逛簬鍒濆﹁呰岃█锛岄夋嫨涓娆惧悎阃傜殑缂栬疟鍣ㄥ拰闆嗘垚寮鍙戠幆澧冿纸IDE锛夊挨涓洪吨瑕併傝╂垜浠娣卞叆鎺㈣ㄥ嚑涓澶囧弹鎺ㄥ磭镄勯夐”锛屽府浣犺交𨱒捐捣姝ャ
缂栬疟鍣ㄧ瘒
1. Tiny C Compiler (TCC): 璁╂柊镓嫔叆闂ㄧ殑涓崭簩涔嬮夛纴TCC浠ユ侪浜虹殑缂栬疟阃熷害镢楃О锛屾棤闇𨰾呭咖镐ц兘褰卞搷锛屽畠浠ョǔ瀹氩拰楂樻晥镢楃О锛屾槸鍒濆﹁呯殑缁濅匠璧风偣銆
2. GNU C Compiler (GCC): 铏界劧涓嶆槸涓绘祦锛屼絾GCC锲犳敮鎸佷䌷澶氱壒镐ц屽囧弹灏濊瘯锛屽敖绠″瓨鍦ㄤ竴浜涘巻鍙查仐鐣欓梾棰桡纴浣嗗畠鍦ㄧ壒瀹氩満鏅涓嬩粛鍊煎缑涓璇曘
3. Microsoft Visual C++ Compiler (MSVC): 浣滀负Windows骞冲彴涓婄殑钥佺墝鐜嬭咃纴MSVC鍑鍊熷氩勾镄勬妧链绉绱锛屽挨鍏舵槸浠嶣orland鎸栨潵镄勫洟阒燂纴濡备粖鍦ㄧǔ瀹氭у拰鍏煎规т笂琛ㄧ幇鍑鸿壊锛屾槸涓嶪DE鎼閰岖殑棣栭夈
4. LLVM/Clang: 楂樼涔嬮夛纴鏁堢巼鍜岄熷害骞堕吨锛岀壒鍒阃傚悎杩芥眰楂樻ц兘镄勫紑鍙戣咃纴Visual Studio鏂扮増链涔熸敮鎸佸叾瀹夎咃纴濡傛灉浣犺拷姹傛瀬镊存ц兘锛孋lang鏄涓涓嶉敊镄勯夋嫨銆
IDE绡
1. Visual Studio: 镞犻渶杩囧氲禈杩帮纴Visual Studio镞犵枒鏄疘DE涓镄勭缮妤氾纴2017鐗堟湰锛圴isual Studio 2017锛夋敮鎸丆++17锛岃槠铹舵湁镞舵洿鏂板甫𨱒ュ皬闂棰桡纴浣嗗逛簬鍒濆﹁呭拰Windows鐢ㄦ埛锛岀ぞ鍖虹増镄勫厤璐圭増链鏄寮虹儓鎺ㄨ崘镄勚
2. CLion: 铏界劧鏀惰垂锛屼絾鐟曚笉鎺╃憸锛岃法骞冲彴鏀鎸佷娇寰桵ac鐢ㄦ埛涔熻兘浜鍙楋纴鐩歌缉浜嵘S鐣ラ娄竴绛癸纴浣嗘暣浣撴ц兘浼樼銆
3. Eclipse: 铏界劧瀹夎呰繃绋嫔彲鑳界箒鐞愶纴浣嗕綔涓烘浘缁忕殑Java涓诲姏IDE锛岀幇鏀鎸丆/C++锛屽挨鍏舵槸鎼閰峂ingw x64缂栬疟鍣锛孍clipse浠岖劧鍊煎缑鎺ㄨ崘銆
4. Code::Blocks: 阃傚悎瀛︽牎鏁椤︼纴寮婧愪笖鏀鎸佸氱岖壒镐э纴浣嗗规柊镓嬫潵璇达纴鍏堕敊璇鎻愮ず鍙鑳戒笉澶熸槑纭锛岄櫎闱炴湁鐗规畩闇姹傦纴钖﹀垯涓嶆槸棣栭夈
5. Notepad++: 铏界劧鑳藉彉鎴愮亩鍗旾DE锛屼絾鐩告瘆鍏朵粬阃夐”锛屾帹钻愮▼搴﹁缉浣庯纴闄ら潪浣犵壒鍒锽沧㈠叾瀹氩埗鍖栥
6. Visual Studio Code: VS镄勮法骞冲彴鐗堟湰锛屽厤璐逛笖锷熻兘寮哄ぇ锛岃槠铹舵湁灏戣稿崱椤匡纴浣嗗逛簬Linux鐢ㄦ埛鎴朚ac镄勮交搴﹀紑鍙戣咃纴瀹冩槸涓涓嶉敊镄勯夋嫨銆
7. Qt Creator: 绠娲佷笖鏀鎸丵t搴旂敤寮鍙戯纴阃傚悎链変竴瀹氱粡楠岀殑寮鍙戣咃纴浣嗗瑰埯瀛﹁呮潵璇达纴閰岖疆杩囩▼鍙鑳界暐鏄惧嶆潅銆
8. Dev-C++: 瀵逛簬锽沧VC6鐣岄溃镄勫嶅彜娲撅纴Dev-C++浠ョ亩鍗曡宪绉帮纴浣嗗姛鑳界浉瀵硅缉灏戙
9. C4Droid 鍜 CPPDroid: 鍊惧悜浜庣Щ锷ㄥ紑鍙戯纴镓嬫満鍜屽钩𨱒夸笂镄凛璇瑷IDE锛屽挨鍏堕傚悎鍦ㄧЩ锷ㄨ惧囦笂缂栫▼銆
缁撹
鍦╓indows涓婏纴灏界GCC鍙鑳介渶瑕侀濆栭厤缃锛屼絾涓嶅簲璁╅厤缃甀DE鎴愪负瀛︿範镄勯吨镣广傞夋嫨涓娆句笌浣犵殑鐩镙囧拰闇姹傜浉鍖归厤镄勭紪璇戝櫒鍜孖DE锛屽皢链夊姪浜庝綘镟翠笓娉ㄤ簬璇瑷链韬锛屼负浣犵殑C璇瑷涔嬫梾濂犲畾鍧氩疄锘虹銆
D. 缂栬疟鍣ㄦ湁鍝浜涜蒋浠剁紪璇戝櫒链夊摢浜
鍏充簬缂栬疟鍣ㄦ湁鍝浜涜蒋浠讹纴缂栬疟鍣ㄦ湁鍝浜涜繖涓寰埚氢汉杩树笉鐭ラ亾锛屼粖澶╂潵涓哄ぇ瀹惰В绛斾互涓婄殑闂棰桡纴鐜板湪璁╂垜浠涓璧锋潵鐪嬬湅钖э紒
1銆佺洰鍓嶆渶娴佽岀殑C璇瑷缂栬疟鍣ㄦ湁浠ヤ笅鍑犵嶏细GNU Compiler Collection 鎴栫О GCCGCC锛圙NU Compiler Collection锛孏NU缂栬疟鍣ㄥ椾欢锛夛纴鏄鐢 GNU 寮鍙戠殑缂栫▼璇瑷缂栬疟鍣ㄣ
2銆佸畠鏄浠GPL璁稿彲璇佹墍鍙戣岀殑镊鐢辫蒋浠讹纴涔熸槸 GNU璁″垝镄勫叧阌閮ㄥ垎銆
3銆丢CC铡熸湰浣滀负GNU镎崭綔绯荤粺镄勫畼鏂圭紪宀╁巻搴呜疟鍣锛岀幇宸茶澶у氭暟绫箓nix镎崭綔绯荤粺锛埚侺inux銆丅SD銆丮ac OS X绛夛级閲囩撼涓烘爣鍑嗙殑缂栬疟鍣锛孏CC钖屾牱阃傜敤浜庡井杞镄刉indows銆
4銆丢CC鏄镊鐢辫蒋浠惰繃绋嫔彂灞曚腑镄勮宪钖崭緥瀛愶纴鐢辫嚜鐢辫蒋浠跺熀閲戜细浠GPL鍗忚鍙戝竷銆
5銆2銆丮icrosoft C 鎴栫О MS CMicrosoft C 鏄痗璇瑷镄勪竴绉岻DE锛堥泦鎴愬紑鍙戠幆澧冿级锛屽父瑙佺殑杩樻湁Microsoft Visual C++锛孊orland C++锛学atcom C++ ,Borland C++ 锛孊orland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ 锛孡ccwin32 C Compiler 3.1,High C,Turbo C绛夌瓑......3銆丅orland Turbo C 鎴栫О Turbo CTurbo C鏄缇庡浗Borland鍏鍙哥殑浜у搧锛孊orland鍏鍙告槸涓瀹朵笓闂ㄤ粠鐑傛梾浜嬭蒋浠跺紑鍙戙佺爷鍒剁殑澶у叕鍙搞
6銆佽ュ叕鍙哥浉缁ф帹鍑轰简涓濂 Turbo绯诲垪杞浠, 濡俆urbo BASIC, Turbo Pascal, Turbo Prolog, 杩欎簺杞浠跺緢鍙楃敤鎴锋㈣繋銆
7銆佹墿灞曡祫鏂欙细C缂栬疟镄勬暣涓杩囩▼寰埚嶆潅锛屽ぇ镊村彲浠ュ垎涓轰互涓嫔洓涓阒舵碉细棰勫勭悊阒舵靛湪璇ラ桩娈典富瑕佸畬鎴愬规簮浠g爜镄勯勫勭悊宸ヤ綔锛屼富瑕佸寘𨰾瀵瑰畯瀹氢箟鎸囦护锛屽ご鏂囦欢鍖呭惈鎸囦护锛岄勫畾涔夋寚浠ゅ拰鐗规畩瀛楃︾殑澶勭悊锛屽傚瑰畯瀹氢箟镄勬浛鎹浠ュ强鏂囦欢澶翠腑镓鍖呭惈镄勬枃浠朵腑棰勫畾涔変唬镰佺殑镟挎崲绛夛纴镐讳箣杩欐ヤ富瑕佸畬鎴愪竴浜涙浛鎹㈠伐浣滐纴杈揿嚭鏄钖屾簮鏂囦欢钖涔夌浉钖屼絾鍐呭逛笉钖岀殑鏂囦欢銆
8銆2銆佺紪璇戙佷紭鍖栭桩娈电紪璇戝氨鏄灏嗙涓阒舵靛勭悊寰楀埌镄勬枃浠堕氲繃璇嶆硶璇娉曞垎鏋愮瓑杞鎹涓烘眹缂栬瑷銆
9銆佷紭鍖栧寘𨰾瀵逛腑闂翠唬镰佺殑浼桦寲锛屽傜矖鎻″垹闄ゅ叕鍏辫〃杈惧纺锛屽惊鐜浼桦寲绛夛绂鍜屽圭洰镙囦唬镰佺殑鐢熸垚杩涜岀殑浼桦寲锛屽傚备綍鍏呭垎鍒╃敤链哄櫒镄勫瘎瀛桦櫒瀛樻斁链夊叧鍙橀噺镄勫硷纴浠ュ噺灏戝唴瀛樿块梾娆℃暟銆
10銆3銆佹眹缂栭桩娈靛皢姹囩紪璇瑷缈昏疟鎴愭満鍣ㄦ寚浠ゃ
11銆4銆侀摼鎺ラ桩娈甸摼鎺ラ桩娈电殑涓昏佸伐浣沧槸灏嗘湁鍏崇殑鐩镙囨枃浠惰繛鎺ヨ捣𨱒ワ纴鍗冲皢鍦ㄤ竴涓鏂囦欢涓寮旷敤镄勭﹀彿钖岃ョ﹀彿鍦ㄥ彟澶栦竴涓鏂囦欢涓镄勫畾涔夎繛鎺ヨ捣𨱒ワ纴浣垮缑镓链夌殑鐩镙囨枃浠舵垚涓轰竴涓鑳藉熻镎崭綔绯荤粺瑁呭叆镓ц岀殑缁熶竴鏁翠綋銆
12銆 鍙傝冭祫鏂欐潵婧愶细锏惧害锏剧-gcc 锛圙NU缂栬疟鍣ㄥ椾欢锛夊弬钥冭祫鏂欐潵婧愶细锏惧害锏剧-Microsoft C鍙傝冭祫鏂欐潵婧愶细锏惧害锏剧-Turbo C銆
E. 典型的编译器可以划分成几个逻辑阶段
这是我们今天的作业,
典型的编译器可以划分成七个主要的逻辑阶段,分别是词法分析器、语法分析器、语义分析器、中间代码生成器、独立于机器的代码优化器、代码生成器、依赖于机器的代码优化器。各阶段的主要功能:
(1)词法分析器:词法分析阅读构成源程序的字符流,按编程语言的词法规则把它们组成词法记号流。
(2)语法分析器:按编程语言的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语言的各种语言构造的层次性,用各记号的第一元建成一种树形的中间表示,这个中间表示用抽象语法的方式描绘了该记号流的语法情况。
(3)语义分析器:使用语法树和符号表中的信息,依据语言定义来检查源程序的语义一致性,以保证程序各部分能有意义地结合在一起。它还收集类型信息,把它们保存在符号表或语法树中。
(4)中间代码生成器:为源程序产生更低级的显示中间表示,可以认为这种中间表示是一种抽象机的程序。
(5)独立于机器的代码优化器:试图改进中间代码,以便产生较好的目标代码。通常,较好是指执行较快,但也可能是其他目标,如目标代码较短或目标代码执行时能耗较低。
(6)代码生成器:取源程序的一种中间表示作为输入并把它映射到一种目标语言。如果目标语言是机器代码,则需要为源程序所用的变量选择寄存器或内存单元,然后把中间指令序列翻译为完成同样任务的机器指令序列。
(7)依赖于机器的代码优化器:试图改进目标机器代码,以便产生较好的目标机器代码。
F. 编译器有哪几部分构成.编译原理
1. 词法分析
词法分析器根据词法规则识别出源程序
中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器
的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质上它查看连续的字符然后把它们识别为“单词”。
2. 语法分析
语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。
3. 语义分析
语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。
4. 中间代码生成
中间代码生成器根据语义分析器的输出生成中间代码。中间代码可以有若干种形式,它们的共同特征是与具体机器无关。最常用的一种中间代码是三地址码,它的一种实现方式是四元式。三地址码的优点是便于阅读、便于优化。