Independentwork №4 Checked by: Karshieva T
Karshi branch of the Tashkent University of Information Technologies named after Muhammad Al – Khorazmi
Evolution of Languages - 1940’s: connecting wires to represent 0’s and 1’s
- 1950’s: assemblers, FORTRAN, COBOL, LISP
- 1960’s: ALGOL, BCPL (→ B → C), SIMULA
- 1970’s: Prolog, FP, ML, Miranda
- 1980’s: Eiffel, C++
- 1990’s: Haskell, Java, Python
- 2000’s: D, C#, Spec#, F#, X10, Fortress, Scala, Ruby, . . .
- 2010’s: Agda, Coq
- . . .
Implementing a Programming Language – How to Undo the Abstraction
Source
program
Lexer
Parser
Type
checker
Interpreter
Optimizer
Code
generator
Machine code
Bytecode
Machine
Virtual machine
I/O
JIT
I/O
I/O
Compiling and Interpreting (2) - Borderline between interpretation and compilation not clear (not that important either)
- Same goes with machine code vs. byte code.
- Examples of modern compiling/interpreting/executing scenarios:
From a stream of characters if (a == b) return; keyword[‘if‘] symbol[‘(‘] identifier[‘a‘] symbol[‘==‘] identifier[‘b‘] symbol[‘)‘] keyword[‘return‘] symbol[‘;‘] Syntactic Analysis (Parsing) From a stream of characters if (a == b) return; to a stream of tokens keyword[‘if‘]
Dostları ilə paylaş: |