Earlier computer programmers actually wrote programs in machine code, but assembler languages or instruction sets were soon developed to speed up programming. Today, assembler programming is used only where very efficient control over processor operations is needed. It requires knowledge of a particular computer’s instruction set, however. Historically, most programs have been written in “higher-level” languages such as COBOL, FORTRAN, PL/I, and C. These languages are easier to learn and faster to write programs with than assembler language. The program that processes the source code written in these languages is called a compiler. A compiler is not one piece of software. It starts out with a lexer analyser, then a parser linker … and ends with the assembly code which the linker takes to map virtual address to the physical addresses. So, basically, it’s a tool which checks for syntax and semantics of a language, creates the code readable by the machine. Similar to the assembler that takes higher-level language statements and reduces them to machine code.
Grace Hopper was credited with devising the first compiler. Grace Brewster Murray was born on December 9, 1906 in New York City. She helped develop the Flow-Matic programming language (1957) and the Common Business-Oriented Language (COBOL; 1959-61) for the UNIVAC, the first commercial electronic computer.
In 1949 she joined the Eckert-Mauchly Computer Corporation and provide businesses with computers. There she began pioneering effort of UNIVAC I, the first large-scale electronic digital computer. To ease their task, Admiral Hopper encouraged programmers to collect and share common portions of programs. Even though these early shared libraries of code had to be copied by hand, they reduced errors, tedium, and duplication of effort.
By 1949 programs contained mnemonics that were transformed into binary code instructions executable by the computer. Admiral Hopper and her team extended this improvement on binary code with the development of her first compiler, the A-O. A program was specified as a sequence of subroutines and arguments. The subroutines were identified by a numeric code and the arguments to the subroutines were written directly after each subroutine code. Basically A-0 system converted the specification into machine code that could be fed into the computer a second time to execute the program. The A-O series of compilers translated symbolic mathematical code into machine code, and allowed the specification of call numbers assigned to the collected programming routines stored on magnetic tape. One could then simply specify the call numbers of the desired routines and the computer would “find them on the tape, bring them over and do the additions. The A-0 functioned more as a loader or linker than the modern notion of a compiler. The A-0 system was followed by the A-1, A-2, A-3 (released as ARITH-MATIC), AT-3 (released as MATH-MATIC) and B-0 (released as FLOW-MATIC).
This is how the evolution of compiler by an American lady took place. Thus making computer ubiquitous in this century.