Compiler
ááœááºááá¯ááºáá¬ááẠáááá¯ááááºá á¯ááœá²á·ááŸá¯áá áºáá¯ááŒá áºááŒá®áž áááá¯ááááºáááºážáá¬áá¬á áá¬ážáá áºáá¯áá¯ááŒáá·áºáá±ážáá¬ážáá¬ážáá±á¬ ááá¯á·ááºáá¯ááºááºáá»á¬ážááᯠááœááºááŒá°áá¬áá¬ážáááºáá±á¬áá¬áá¬á áá¬áž(object code áá¯áá±á«áºáá±á¬ á ááŸáá·áº á áá¬áá»áŸááºáá«áá±á¬áá¯á¶á á¶)ááá¯á· ááŒá±á¬ááºážáá²áá±ážááá·áºá¡áá¬ááŒá áºáááºá á¡áááá¡áá»ááºááŸá¬ ááá¯á·ááºáá¯ááºáẠááᯠexecutableáááá¯ááááºááá¯á·ááŒá±á¬ááºážááŒááºážáááºááŒá áºáááºá ááœááºááá¯ááºáá¬áá°áá±á¬ á¡áááºááŸá¬ á¡ááá·áºááŒáá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬áž ááŒáá·áºáá±ážáá¬ážáá¬ážáá±á¬ ááá¯á·ááºáá¯ááºááºáá»á¬ážááᯠá¡ááá·áºáááá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬áž ááá¯á· (assembly languageááá¯á·machine code)ááŒá±á¬ááºážááŒááºážááŒá áºáááºá ááœááºááŒá°áá¬ááœáẠááœááºááá¯ááºáá¬ááŒáá·áºááŒá±á¬ááºážáá¬ážáá±á¬ áááá¯ááááºááᯠáá±á¬ááºážááŸááºááá¯ááºáááºááá¯áá«á á¡ááá¯áá«ááœááºááŒá°áá¬á á á®áá®áá°ááá¯á· á ááºáá±á¬ááºážááŸááºá áá áºááẠááœááºááá¯ááºáá¬áá¯ááºáá±á¬ááºáá±áá±á¬ á ááºáá±á¬ááºážááŸááºá áá áºááŸáá·áº ááá°áá®áá«á ááá¯ááœááºááá¯ááºáá¬ááᯠcross-compileráá¯áá±á«áºááá¯áááºá á¡ááá·áºáááá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬ážá០á¡ááá·áºááŒáá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬ážááá¯á· ááŒá±á¬ááºážááá·áºá¡áá¬ááᯠdecompiler áá¯áá±á«áºááá¯ááŒáááºá á¡ááá·áºááŒáá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬ážá¡áá»ááºážáá»ááºáž ááŒá±á¬ááºážáá²ááŒááºážááᯠ(language translater ,source to source translater or language converter )áá¯áá±á«áºááá¯ááŒáááºárewriter áááºáááºáž áááá¯ááááºáá áºáá¯ááŒá áºááŒá®áž áá¬áá¬á áá¬ážááŒá±á¬ááºážáá²ááŒááºážáááŸááá² áá±á¬áºááŒááŸá¯áá¯á¶á á¶ááá¯áᬠááŒá±á¬ááºážáá²áá±ážáá±á¬á¡áá¬ááŒá áºáááºá ááœááºááá¯ááºáá¬ááẠlexical analysis, preprocessing, parsing, (Syntax-directed translation), code generation, and code optimization á áá±á¬ áá¯ááºáááºážáá»á¬áž áá¯ááºáá±á¬ááºááŸá¯ááŒá¯áááºá ááœááºááá¯ááºáá¬ááŒá±á¬áá·áºááŒá áºáá±á¬ áááá¯ááááºáá¡ááŸá¬ážáá»á¬ážááẠááŸá¬ááœá±áá¬ááœááºáááºáá²áááŒáá·áº ááœááºááá¯ááºáá¬áá±ážáá¬ážáá°áá»á¬ážááŸáááºážááá¯á·á áá±á¬á·ááºáá²á¡á¬áž áá±á¬ááºážááœáẠá á±áááºá¡áá°ážáá¯á¶á·áááŒá¯ááŒáá¯ážá á¬ážááŒááááºá
áááá¯ááºáž
[ááŒááºáááºáááº]á¡á á±á¬ááá¯ááºážááœáẠááœááºááŒá°áá¬áá»á¬ážá¡ááœáẠáá±á¬á·áá²áá»á¬ážááᯠassembly language ááŒáá·áºáá¬áá±ážáá¬ážááŒááááºá ááœááºááá¯ááºáá¬áááºááœááºáá±ážáá¬ážááŒááºážááẠá á®áá®áá°á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áœá¬ááœáẠáá±á¬á·ááºáá²áá»á¬ážááŒááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºá áœááºážááẠááááá¯ážááŒá®ážááŸáá±á¬áºáááºáž á¡ááá·áºááŒáá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬ážááᯠáá®ááœááºááá¯ááºááŒááºáž áááŸáááŒáá±ážáá»á±á ááá¯ááŒá±á¬áá·áº ááá¯áá±á¬ááºá¡áá«á ááááá¯á¶áž ááœááºááá¯ááºáᬠáá®ááá¯ááºážááœá²ááá¯ááºááẠá¡ááœáẠááá·áºáááºááŸá¯ááŒá Ạáá±áá±á¬áááºááá¯áá®(memory)ááẠááœááºááŒá°áá¬áá»á¬ážá¡ááœáẠáááºážááá¬á áááºáá±á«áºááŸá¯áááœáẠááŒá áºáá±áá²á·áááºáááá áááŸá áºáá¯ááºá¡áá±á¬ááºááœáẠáááŸááºážáá±á«áºááœááºááŸá®ááá¯ááŒááºážáááŸááá±á¬ ááááá¯á¶áž áááá¯ááááºážáááºážáá¬áá¬á áá¬áž á¡ááá¯ááŒá¯áá»ááºááœááºáá±á«áºáá¬áááºá áá áºáááºáá²ááŸá¬ááẠá ááºážáááºá¡ááá·áº ááœááºááá¯ááºáá¬áá»á¬ážáá±á«áºáá±á«ááºáá²á·áááºá áááá¯á¶áž ááœááºááá¯ááºáá¬ááᯠááá á áá¯ááŸá áºááœáẠGrace Hopper á០A-0 programming languageá¡ááœáẠáá±ážáá¬ážáá²á·áááºá IBM ááœáẠJohn Backus áŠážáá±á¬ááºááŸá¯ááŒáá·áº FORTRAN á¡ááœá²á·á០ááŒá®ážááŒáá·áºá á¯á¶áá±á¬ ááœááºááá¯ááºáá¬ááᯠááá á áá¯ááŸá áºááœáẠáá¯ááºáá°á áœá¬ ááááºáááºááá¯ááºáá²á·áááºá ááááááœáẠCOBOLáááºáá»á¬ážááŒá¬ážááŸáá±á¬áááá¯áá¬ááœá²á·á ááºážáá¯á¶áá»á¬ážáá«ááá·áº ááœááºááá¯ááºáá¬ááœáẠááœááºááŒá°áá¬áá¬ážáááºáá±á¬áá¯á¶á á¶ááá¯á·ááŒá±á¬ááºážááẠá¡á á±á¬áá¯á¶áž áá¬áá¬á áá¬ážááŒá áºáááºá
ááœááºááŒá°áá¬áá¬áá¬á áá¬ážáá»á¬ážá¡áá áºáá±á«áºáá±á«ááºáá¬ááŒááºážááŸáá·áºááœááºááŒá°áá¬ááœá²á·á ááºážááŸá¯áááá¯áá¬áá»á¬áž ááŸá¯ááºááœá±ážááá¯ážáááºáá¬ááŒááºážááŸáá·áºá¡áá° ááœááºááá¯ááºáá¬áá»á¬ážáááºáááºáž ááá¯áááŸá¯ááºááœá±ážáá¬áá²á·áááºá á¡á á±á¬ááá¯ááºáž ááœááºááá¯ááºáá¬áá»á¬ážááᯠassembly language ááŒáá·áºáá¬áá±ážáá¬ážááŒáááºá ááááá¯á¶áž self-hosting ááœááºááá¯ááºáá¬ááᯠáááááá¯ááŸá áºááœáẠLisp á¡ááœáẠMIT á០Tim Hart ááŸáá·áº Mike Levin ááá¯á·ááááºáá®ážáá²á·áááºááááºážááẠáááá áá¯ááŸá áºá¡áá áá¬áá¬á áá¬ážááá¯á·ááœáẠááœááºááá¯ááºáá¬ááá¯á·ááá¯ááá¯ááá¯áá±á¬ááºážááœááºá á±ááẠá¡ááááááºááœá±á·áá»áá²á·áá±á¬áºáááºáž Pascal ááŸáá·áº C ááá¯á·ááẠáá¬áá¬á áá¬ážááá¯á·á¡ááœáẠááœá±ážáá»ááºáá²á·ááŒááá·áºá¡ááœáẠáá»á±á¬áºááŒá¬ážáá²á·ááŒáááºáself-hosting ááœááºááá¯ááºáá¬áááºáá±á¬ááºáá¬ááœáẠbootstrapping áá¯áá±á«áºáá±á¬ ááŒá¿áá¬ááŸááááºá áá¬áá¬á áá¬ážáá»á¬ážá¡ááœáẠá¡ááá¯áá« ááœááºááá¯ááºáá¬á¡á¬ážá¡áá¯á¶ážááŒá¯ááá¯ááºááẠááááá¯á¶ážá¡áá±ááŒáá·áº á¡ááŒá¬ážáá¬áá¬á áá¬ážáá»á¬ážááŒáá·áºáá±ážáá¬ážáá±á¬ ááœááºááá¯ááºáá¬ááŒáá·áº ááœááºááá¯ááºážáá¯ááºááŒááºáž (ááá¯á·) interpreterááœááºáá±á¬ááºážááŸáẠáá±áá±á¬ááœááºááá¯ááºáá¬ááŒáá·áº(Hart and Levin's Lisp compiler) ááœááºááá¯ááºážáá¯ááºááŒááºážááᯠáŠážá áœá¬áá¯ááºáá±á¬ááºááááºá
Compilation
[ááŒááºáááºáááº]ááááá¯á¶áž á¡ááá·áºááŒáá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬áž FORTRAN (FORmula TRANslator) áááá¯ááºáá® assembly language ááá¯áá¬ááœááºáá»ááºá áœá¬ á¡áá¯á¶ážááŒá¯áá²á·ááŒáááºá ááœááºááŒá°áá¬áá¬ááºáá²ááœá²á·á ááºážááŸá¯áááá¯áá¬áá°áá®ááá·áºáá¯á¶á á¶ááœáẠassembly language ááẠáááá¯ááááºáá»á¬ážááá¯ááŒááºáááºáá±áá¬áá»ááŒááºážáá»á¬ážááŸáá·áº ááŒááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬áºáááºáž ááœááºááŒá°áá¬áá¬ááºáá²ááœá²á·á ááºážááŸá¯áááá¯áá¬ááá°áá®ááá·áºáá¯á¶á á¶ááœáẠáááá¯ááááºáá»á¬ážááᯠááŒááºáááºáá±ážáá¬ážááŒá¯ááŒáẠááŒááááºá
FORTRAN áá±á¬ááºááá¯ááºážáá±á«áºáá¬ááá·áº á¡ááá·áºááŒáá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬ážáá»á¬ážááŒá áºáá±á¬ COBOL, C, ááŸáá·áº BASIC ááá¯á·ááœáẠáááá¯ááááºáᬠáá»á¬ážááẠáááŸááºážáá±á«áºááŸá®ááá¯ááŒááºážáááŸááá±á¬ áááá¯ááááºáá»á¬ážááá¯áá±ážáá¬ážááá¯ááºááŒáááºá ááœááºááá¯ááºáá¬áá»á¬ážááẠá¡ááá·áºááŒáá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬ážáá»á¬ážááᯠáá¬ááºáá²áá»á¬ážá¡ááœáẠáááŸááºáž áá¬áá¬á áá¬ážááœáẠáŠážáááºáá»ááºáá¬ážáá±á¬ áááá¯ááááºáá»á¬ážáá®ááá¯á· ááŒá±á¬ááºážáá²áá±ážáááºá ááá¯áááá¯ááááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá០á¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®ááŒá áºáááºá
Structure of a compiler
[ááŒááºáááºáááº]ááœááºááá¯ááºáá¬ááœááº
- áááá¯ááááºá á á®á ááºáá±áá¬áá»áá¬ážááŒááºáž ááŸááºáááºááá¯ááºááŸá¯á¡á¬áž á á áºáá±ážááŒááºáž
- ááŸááºáááºáá±á¬ ááá¯á· á¡áá»áá¯ážááááºáá±á¬ááºážááá·áº áá¯ááºááºáá»á¬ážááá¯áá¯ááºáá±ážááŒááºáž
- áá¯ááºáá±á¬ááºáá±áá¬á¡ááŒá±á¡áá±ááœáẠá á¯á ááºážááŸá¯áá»á¬ážááŒá¯áá¯ááºáá±ážááŒááºáž
- assembler ááŸáá·áº/ááá¯á· linker ááá¯á·á áá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážá¡á ááœááºáá±á«áºáá¬áá±á¬á¡ááŒá±áá»á¬ážá¡á¬áž á á®á ááºáá±ážááŒááºáž ááá¯á·áá«áááºáááºá
ááœááºááá¯ááºáá¬ááœáẠá¡áááá¡á áááºá¡ááá¯ááºáž (á)ááá¯ááºážáá«áááºáááºá ááŸá±á·ááá¯ááºážáá¡áááºááá¯ááºážááŸáá·áºáá±á¬ááºáá¯á¶ážááá¯ááºážááá¯á·ááŒá ẠááŒáááºá
ááŸá±á·áá¯á¶ážááá¯ááºážááẠáá±ážáá¬ážáá¬ážáá±á¬ áááá¯ááááºáá»á¬ážá¡á¬áž áááá¯ááááºáááºážáá¬áá¬á áá¬ážá áá±ážáá¬ážááŸá¯áá¯á¶á á¶ááá¯á·ááŸáá·áº ááá¯ááºáá®ááŸá¯ááŸááááŸáá á áºáá±ážáááºá á¡ááá¯áá«á¡áá»ááºááœáẠá¥ááá±ááŸááºááá¯ááºáá®ááŸá¯ ááŸááááºááŒá áºá á±ááááŸááááºááŒá áºá á± á¡áá»á¯á¶ážáááºáááºá ááŸá±á·áá¯á¶ážááá¯ááºážááẠááá¯á·ááºáá¯ááºáá»á¬ážá (intermediate representation or IR ) ááá¯ááºá á¬ážááŒá¯ááŒá¬ážáá¶ ááᯠáá¯ááºáá¯ááºáá±ážáááºá á¡áááºáá¯á¶ážááá¯ááºážááẠá¡ááááá¯ááºáááºážáá±á¬ááºááœááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒáááºá á¡áá°ážáááŒáá·áº á¡áá¯á¶ážááŒá¯ááááá±á¬áá¯ááºááºáá»á¬ážááᯠáááºááŸá¬ážáá±ážááŒááºážá ááááºážáá±áááºááá¯ážáá»á¬ážááᯠááŸá¬ááœá±ááá¯ážááœá¬ážá á±ááŒááºážáááŒáááºáááºáá»á¬ážá áœá¬áá¯ááºáá±á¬ááºááá±á¬áá±áá¬(looping áááºááŒááºáž)ááá¯á·á¡á¬áž áá»á±á¬á·áá»ááá¯ááºááẠáá±áá¬áá áºáááºááŸááºáá±ážááŒááºážááá¯á·ááá¯áá¯ááºáá±á¬ááºááŒáááºá áá±á¬ááºáá¯á¶ážá¡ááá·áºá¡ááœáẠááá¯ááºá á¬ážááŒá¯ááŒá¬ážáá¶ááá¯áááºáž áá¯ááºáá¯ááºáá±ážáááºá áá±á¬ááºáá¯á¶ážá¡ááá·áºááẠá¡áááºááá¯ááºážá¡ááá·áºá០áá¯ááºáá±ážááá¯ááºáá±á¬ ááá¯ááºá á¬ážááŒá¯ááŒá¬ážáá¶ááᯠassembly áá¯ááºááºá¡ááŒá áºáá¯ááºáá¯ááºáá±ážáááºá
Compilier Output
[ááŒááºáááºáááº]ááá¯ááºááá¯ááºáá¬áá»á¬ážááᯠáááºážááá¯á·áá¯ááºááá¯ááºáá±á¬ áá¯ááºááºáá»á¬ážáá¯ááºáá±á¬ááºááŒááá·áº ááááºáá±á¬ááºáž áá»á¬ážáá±á«áºááœááºááŸá¯áááºá á¡áá»áá¯ážá¡á á¬ážááœá²ááŒá¬ážáá¬ážááŒáááºá áá¯á¶ááŸááºááááá¯ážáá» ááœááºááá¯ááºáá¬ááá¯á·ááá¯ááºááºáá»á¬ážááẠáááºážááá¯á·áá¯ááºáá±á¬ááºáá±ááŒáá±á¬ á ááºáááºáááºá áá áºááŸáá·áºáá°áá®áá±á¬ ááœááºááŒá°áá¬á¡áá»áá¯ážá¡á á¬ážááá¯á·ááœááºáᬠáá¯ááºáá±á¬ááºá á±ááẠáááºááœááºáááºácross compiler ááá¯á·á áá¯ááºááºáá»á¬ážááá¯áá° ááŒá¬ážáá¬ážáá±á¬ ááááºáá±á¬ááºážááá¯á·ááœááºáááºáž áá¯ááºáá±á¬ááºááá¯ááºá á±ááẠáá®ááá¯ááºážááŒá¯áá¯ááºáá¬ážáááºá virtual machineááá¯á·á¡ááœáẠááœááºááá¯ááºáá¬ááŸáá¯ááºáá±ážááá¯ááºáá±á¬áá¯ááºááºáá»á¬ážááẠáá°áá®áá±á¬ááááºáá±á¬ááºážáá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá±á¬ááºážáá¯ááºáá±á¬ááºááŒáááá·áºáááºá
Compiled versus interpreted languages
[ááŒááºáááºáááº]á¡ááá·áºááŒáá·áºáááá¯ááááºáááºážáá¬áá¬á áá¬ážáá»á¬ážááẠá¡áá»á¬ážá¡á¬ážááŒáá·áº ááŒá±á¬ááºážáá²áá±ážááá·áºáá¯á¶á á¶(compiled language ááá¯á·interpreted language) ááŸááááºá