Introduction to Compiler Design | Language Processing System

THE GATEHUB
21 Dec 202315:26

Summary

TLDRThis video script offers an in-depth exploration of compilers, detailing their role as software that translates high-level programming languages into machine code. It clarifies that compilers are not hardware but programs, emphasizing the distinction between source and target code. The script delves into the multi-stage compilation process, including pre-processing, where directives are handled, and the conversion to assembly language. It also touches on the roles of the assembler, linker, and loader, collectively referred to as the compiler's 'cousins.' The video aims to demystify the compilation process, making it accessible to viewers, and highlights the importance of error-free code for successful translation into executable machine code.

Takeaways

  • πŸ˜€ A compiler is a software that translates high-level programming languages into low-level machine language.
  • πŸ› οΈ The compiler's process involves several modules including pre-processor, compiler, assembler, linker, and loader, which together form a complete language processing system.
  • πŸ’‘ High-level languages like C and C++ are more comfortable for programmers to write than machine language, which is a series of binary 1s and 0s.
  • πŸ” The pre-processor handles tasks like file inclusion and macro expansion, which involve substituting code snippets and including external code, rather than performing computations.
  • πŸ“ The main function of the compiler is to convert source code (high-level language) into target code (assembly language), which is a lower-level representation closer to machine language.
  • πŸ”§ The assembler's role is to convert assembly language into relocatable machine code, which is a form of code that can be moved to different memory locations without change.
  • πŸ”— The linker combines multiple relocatable machine code files into a single relocatable file, which is necessary for executing large projects that consist of many files.
  • πŸ“š The loader is responsible for converting the single relocatable machine code file into an executable file, known as absolute machine code, which the computer's processor can execute.
  • ⚠️ Compilers are also responsible for error checking, particularly syntax errors, and will provide feedback to the programmer if the code does not adhere to the language's rules.
  • πŸ”‘ The terms 'pre-processor', 'assembler', 'linker', and 'loader' are often referred to as the 'cousins of the compiler', highlighting their integral roles in the compilation process.

Q & A

  • What is a compiler?

    -A compiler is a software or program that takes high-level language as input and produces low-level language as output, specifically converting source code into machine language that a computer's processor can understand.

  • Why is a compiler necessary?

    -A compiler is necessary because writing directly in machine language, which is binary code, is complex and time-consuming for programmers. Compilers allow developers to write in high-level languages like C or C++, which are easier to understand and work with.

  • What is the difference between high-level and low-level languages?

    -High-level languages, such as C or C++, are closer to human language and are easier for humans to understand and write. Low-level languages, like machine language, consist of binary code that directly corresponds to a computer's processor instructions.

  • What is the role of the preprocessor in a compiler?

    -The preprocessor handles tasks such as file inclusion and macro expansion. It processes directives that start with a hash symbol (#) and prepares the code for the next stage of compilation by removing or substituting certain elements.

  • Can you provide an example of a preprocessor directive?

    -Yes, an example of a preprocessor directive is '#include' which is used to include the contents of a header file into the source code, and '#define' which is used to create macros.

  • What is the output of the compiler after it processes the source code?

    -The output of the compiler after processing the source code is assembly language, which is a low-level representation of the original high-level code, still not executable but closer to machine language.

  • How does the assembler fit into the compilation process?

    -The assembler takes the assembly language output from the compiler and converts it into machine code, which is the binary code that a computer's processor can execute.

  • What is the purpose of the linker in a compiler suite?

    -The linker combines multiple relocatable machine code files, typically generated from different source files, into a single executable file that can be loaded and run by the operating system.

  • What is the loader's role in the compilation process?

    -The loader is responsible for loading the executable file produced by the linker into memory and preparing it for execution by the computer's processor.

  • Why might a compiler produce an error message?

    -A compiler produces an error message when it encounters a syntax error in the source code, such as a missing semicolon or incorrect usage of language constructs, which does not adhere to the rules of the programming language.

  • What is meant by the term 'language processing system' in the context of compilers?

    -The term 'language processing system' refers to the entire suite of tools, including the preprocessor, compiler, assembler, linker, and loader, that work together to convert high-level language code into executable machine code.

Outlines

00:00

πŸ’» Introduction to Compilers

This paragraph introduces the concept of a compiler, defining it as a software that translates high-level programming languages like C or C++ into low-level machine language, which consists of binary code (1s and 0s). It explains that while a computer's processor can only understand binary, programmers find it cumbersome to write in such a format, hence the utility of compilers. The paragraph also touches on the components of a compiler, which include the pre-processor, compiler, assembler, linker, and loader, and outlines the process of how a compiler works, starting with pre-processing and ending with the generation of machine code.

05:05

πŸ”§ The Role of the Preprocessor

The second paragraph delves into the specific role of the pre-processor within the compiler process. It describes how the pre-processor performs tasks such as file inclusion and macro expansion. File inclusion involves adding necessary code from header files like 'stdio.h' into the program, while macro expansion replaces defined macros with their corresponding values or code. The paragraph provides an example to illustrate these concepts, showing how a simple C program with includes and defines is transformed by the pre-processor into a form that is ready for the next stage of compilation. It emphasizes that the pre-processor does not perform computations but merely substitution.

10:06

πŸ”— Linking and Loading in Compilation

The third paragraph discusses the functions of the linker and loader in the compilation process. It explains that the linker takes multiple relocatable machine code files produced by the assembler and combines them into a single relocatable file, which is necessary for executing a project that consists of many files. The loader then takes this single file and converts it into an executable (.exe) file, known as absolute machine code. The paragraph highlights the importance of these steps in creating a final executable program and mentions that if there are syntax errors in the source code, the compiler will not convert it into machine code but will instead report the errors to the user.

15:11

πŸ“š Summary of Language Processing System

The final paragraph summarizes the entire process of a language processing system, which includes the pre-processor, compiler, assembler, linker, and loader. It emphasizes that these components work together to convert high-level language into executable machine code. The paragraph serves as a recap, reminding viewers of the key points discussed in the video and encouraging them to note down the process for future reference.

Mindmap

Keywords

πŸ’‘Compiler

A compiler is a software program that translates source code written in a high-level programming language into low-level language or machine code that a computer's processor can execute. In the video, the compiler is described as a translator that takes high-level language as input and produces low-level language as output, emphasizing its role in making programming languages accessible to programmers while ensuring compatibility with the machine's processor.

πŸ’‘High-level language

High-level languages are programming languages that are close to human languages, making them easier for humans to understand and write. Examples include C, C++, and Python. The video script mentions that compilers take high-level languages as input, which are then converted into a form that the computer's processor can understand.

πŸ’‘Low-level language

Low-level languages, such as machine language, consist of binary code (0s and 1s) that directly correspond to a computer's machine code. The video explains that while these languages are efficient for the processor, they are not practical for human programmers due to their complexity, hence the need for compilers.

πŸ’‘Pre-processor

The pre-processor is a module that processes the source code before the compilation phase. It handles tasks such as file inclusion and macro expansion. In the video, the pre-processor is described as handling directives like '#include' and '#define', which are used to include necessary header files and define macros in the C programming language.

πŸ’‘Assembly language

Assembly language is a low-level programming language that is specific to a computer architecture and is converted into machine code by an assembler. The video script explains that the compiler's output is assembly language, which is a step closer to machine code but still readable and writable by humans to some extent.

πŸ’‘Assembler

An assembler is a program that translates assembly language into machine code. The video script mentions that the assembler's role is to convert the compiler's output, which is assembly language, into relocatable machine code that the linker can process further.

πŸ’‘Linker

The linker is a program that combines multiple object files or libraries, resolving references between them, and produces an executable file. The video script describes the linker as taking multiple relocatable machine code files and combining them into a single executable, making it ready for the loader to load into memory.

πŸ’‘Loader

The loader is a program that loads executable files into memory and prepares them for execution. In the video, the loader is mentioned as the final step in the process, taking the single relocatable machine code file produced by the linker and converting it into absolute machine code that the processor can execute.

πŸ’‘Macro expansion

Macro expansion is a process where pre-processor directives are replaced with their defined values or code sequences. The video script uses the example of '#define' to illustrate how the pre-processor substitutes a macro with its definition, which is a form of text substitution rather than computation.

πŸ’‘Relocatable machine code

Relocatable machine code is machine code that can be moved to different memory locations without needing to be recompiled. The video script explains that the assembler produces relocatable machine code, which is then linked by the linker into a single executable file that can be loaded by the loader.

πŸ’‘Language processing system

The language processing system refers to the entire suite of tools and processes involved in converting high-level language code into executable machine code. The video script describes the sequence starting from the pre-processor to the loader, encompassing the compiler, assembler, linker, and loader, as part of the language processing system.

Highlights

A compiler is a software that translates high-level language into low-level language.

High-level languages like C, C++ are human-readable, while low-level languages are machine-readable binary codes.

The processor can only understand binary, which is why a compiler is necessary to bridge the gap between human and machine languages.

Writing directly in machine language is complex for programmers, hence the use of compilers.

A compiler's definition includes being a translator that converts one code into another.

GCC and Turbo C compilers are not just compilers but contain multiple modules like pre-processor, compiler, assembler, linker, and loader.

The pre-processor performs tasks like file inclusion and macro expansion before the compilation process.

The compiler's role is to convert source code into target code, which is assembly language.

The assembler's job is to convert assembly language into relocatable machine code.

The linker combines multiple relocatable machine codes into a single executable file.

The loader is responsible for converting the single relocatable machine code into absolute machine code that can be executed.

Compilers are part of a larger system known as the language processing system, which includes pre-processors, compilers, assemblers, linkers, and loaders.

Compilers not only perform translation but also error detection, particularly syntax errors in the source code.

Assembler, linker, and loader are referred to as the cousins of the compiler, highlighting their interconnected roles in the compilation process.

The compilation process involves multiple steps, from high-level language input to the production of an executable file.

Understanding the roles of each module in the compiler system is crucial for computer science students.

Transcripts

play00:00

Hello everyone, in today's video we will discuss about the compiler.

play00:04

So first of all we will discuss what is a compiler, what is its definition,

play00:08

how does a compiler work, that means how does a compiler compile a program and convert it into machine code.

play00:14

And what are the functionalities, we discuss all these things one by one.

play00:17

So first of all let's see what is a compiler.

play00:20

What is a compiler, basically a compiler is your software.

play00:24

Compiler is not hardware, compiler is a program, it is software.

play00:27

For which your input is high level language and its output is low level language.

play00:34

High level language and low level language.

play00:37

High level language means any programming language like C, C++, these are high level languages.

play00:43

And low level language means machine language.

play00:48

Machine language means binary 1 0 1 1 0.

play00:51

What are all these?

play00:53

Machine language.

play00:55

What is a machine?

play00:56

A machine cannot understand your programming language.

play00:59

Machine means here, machine means we are not talking about the computer,

play01:02

machine means we are talking about the processor, ok.

play01:05

Let's write here, machine means we are talking about the processor.

play01:08

Because the processor can only understand your binary.

play01:12

So such a question can also come to mind that why don't we write machine language directly.

play01:17

So machine language, the programmer is not comfortable because writing in binary is quite complicated.

play01:23

So what is better?

play01:25

We have made a module compiler later and for that what happened is your high level language.

play01:28

What is C, C++?

play01:30

It looks like English and some mathematical notation is used in it.

play01:33

So it is easy to write for programmer or user.

play01:36

So what is the definition of compiler?

play01:38

Compiler is a software or you can say program which converts the high level language into low level language.

play01:43

And what is your high level language?

play01:46

It is also called source code.

play01:49

Source code.

play01:51

What does compiler do?

play01:52

It converts source code into target code.

play01:54

Ok.

play01:56

It converts target code.

play01:58

So write anything, it converts source code into target code.

play02:02

It converts high level language into low level language.

play02:05

It converts any programming language which is compiler based into machine language.

play02:10

These are all the definitions.

play02:12

In a way, what is this?

play02:13

It is a translator.

play02:14

What does it do?

play02:15

It translates one code into another code.

play02:17

Fine.

play02:18

This is the definition of this.

play02:20

So this is your definition.

play02:21

Which you have in almost every textbook.

play02:23

You will get it in every website.

play02:25

But compiler is not just this.

play02:27

If we take an example.

play02:29

Like your Turbo C or GCC compiler.

play02:32

Compiler does not just mean compiler.

play02:35

It contains a lot of modules.

play02:37

Ok.

play02:38

So what are the things in it?

play02:40

It is your pre-processor, compiler, assembler, linker, loader.

play02:43

The combination of all these modules is GCC compiler or Turbo C compiler.

play02:49

So we have this particular.

play02:51

The modules which we will discuss in the subject or course.

play02:54

We will discuss only about the compiler.

play02:56

So this is basically how it works.

play02:58

Let's see this.

play02:59

Now see.

play03:00

High level language is the input.

play03:02

For which it is pre-processed.

play03:04

So what happens before compilation is pre-processing.

play03:07

This is very important to understand.

play03:09

Compilation does not start directly.

play03:11

And what is the output of this?

play03:13

Low level language.

play03:14

Ok.

play03:15

Here.

play03:16

So now we will discuss all these modules.

play03:19

So there will be more clarity.

play03:20

Basically what is compiler?

play03:22

How does it work?

play03:23

So directly you have compiler in high level language.

play03:28

Before that what will happen?

play03:29

Your pre-processing.

play03:30

So what does pre-processing do?

play03:32

It converts high level language into pure high level language.

play03:35

It can be called pure high level language or modified high level language.

play03:39

Somewhere pure is also written and somewhere modified.

play03:41

Both are same.

play03:42

So what is the work of pre-processor?

play03:44

So let's understand with an example.

play03:46

What is the work of pre-processor?

play03:48

Let's suppose we have written a program.

play03:49

Ok.

play03:50

Has include.

play03:51

So now see this is your small program which is written in C programming language.

play03:55

Because what is C?

play03:56

It is compiler based language.

play03:58

So now see.

play03:59

Hash include STDIU dot H.

play04:00

Hash define S square of A.

play04:03

Which is A into A.

play04:05

Main function.

play04:06

Here are two variables and we are using it.

play04:08

So now pre-process.

play04:09

If we have given this program to compiler then first of all what will happen?

play04:12

Pre-processing will happen.

play04:13

Ok.

play04:14

So I have included these two so that there is more clarity that how exactly pre-processing

play04:18

is done.

play04:19

So what is the hash?

play04:20

What is called as pre-process directive?

play04:21

We have to assume that you have basic idea of C programming.

play04:24

Ok.

play04:25

So now see.

play04:26

Now here suppose that it is a program of yours.

play04:29

So what is the meaning of hash include STDIU dot H and hash define?

play04:33

See here we have used a function.

play04:36

What is the name of this function?

play04:37

Printf.

play04:38

So if we are using any function in C program.

play04:42

So here we have called the function.

play04:44

So what will happen when we call this function?

play04:47

Then where will the control flow go?

play04:48

where that function will be defined, where its body will be, see in this program, your function is not defined anywhere.

play04:55

So where is this function defined? In stdio.h, that is, in that header file.

play05:00

So we have not written the code in it, so what will happen to us, we will have to include it in this program.

play05:05

So that's why we write this line. What does header file mean?

play05:09

That the function we are using is not present in this program, so what will we have to do, we will have to include it in it.

play05:15

This is done. So now what will you do, as soon as we pre-process this program, then what will you do, it will eliminate you.

play05:23

That means your line will be eliminated and what will you do in place of this printf, this whole code, whatever the printf code will be,

play05:30

you will get it here, that is, what will you do, it will include it.

play05:34

So what will your file, i.e. the function that will be present, what will it do, it will include it in it.

play05:39

So what do we call this, file inclusion, ok, what do we call this processing, file inclusion.

play05:45

Clear, next, now this has defined means, this is called macros, ok.

play05:51

So what will we do to this, has defined square of a which is equal to a into a.

play05:55

So let's see where it is present in the program, here.

play05:57

So what will it do, what will it write in place of square of a here, a into a followed by a semicolon.

play06:04

So what is happening here, substitution, ok.

play06:06

What do we call this, this is called macro expansion.

play06:09

What do we call this process, macro expansion, fine.

play06:14

Ok.

play06:15

So what is the work of preprocessor, file inclusion, micro expansion.

play06:19

The preprocessor does not compute anything, let's write it here.

play06:23

The preprocessor does not do any computation, no computation.

play06:27

Here this value will not be calculated by square, no computation, only substitution.

play06:38

It will not do any computation, it will only substitute.

play06:42

So what will it do in place of square of a?

play06:44

What will it do in place of square of a?

play06:45

a into a.

play06:46

Now see what is the value of this, let's see.

play06:48

What is the value of a?

play06:49

3.

play06:50

So what will happen here?

play06:51

3 multiplied by 3 which is equal to 9, 9 plus 10 which is equal to 19.

play06:56

So what will be the output of this?

play06:57

19.

play06:58

So preprocessor, see.

play07:01

This line means if this header file is included in place of that printf, that's why it is called file inclusion.

play07:07

And this is the value of square of a, a star a.

play07:11

So wherever it is in this program.

play07:12

Suppose it is present here once.

play07:13

Suppose it is present in 10 places in the program.

play07:15

So what will it do?

play07:16

It will substitute a star a.

play07:18

So that's why it is called macroexpansion.

play07:21

So what is the work of the preprocessor?

play07:23

It does not do computation.

play07:25

Okay.

play07:26

What does it do?

play07:27

It just substitutes.

play07:28

No computation will be performed.

play07:29

So now let's see it again.

play07:31

What is its input?

play07:32

What is the input of the preprocessor?

play07:33

High level language.

play07:34

What will it do?

play07:35

Pure high level language.

play07:36

That means you will not get any preprocessor directive.

play07:39

There will be no hash line that will eliminate all that.

play07:42

That means it will be substituted.

play07:44

Okay.

play07:45

Now whose input is pure high level language?

play07:47

Compiler's.

play07:48

Okay.

play07:49

So what is the output of compiler?

play07:50

That is your assembly language.

play07:55

Assembly language.

play07:56

Okay.

play07:57

So if someone asks you what is the definition of compiler?

play08:01

So this is the definition we have discussed.

play08:04

But as a computer science student you should know that the input for compiler is pure high

play08:09

level language and the output is assembly language.

play08:11

Okay.

play08:12

Now we have got the output of assembly language.

play08:14

Now we want assembler.

play08:15

To convert this assembly language.

play08:17

What is the assembly language?

play08:18

Let me explain it for you.

play08:19

So what will assembler do in this assembly language?

play08:21

It will convert relocatable machine code into relocatable machine code.

play08:35

Okay.

play08:36

It is relocatable machine code.

play08:37

Here machine code is written in M-C.

play08:38

Now what should we do?

play08:39

Ok.

play08:40

Now see, the interesting story has started here, then what is the meaning of assembly language, we will tell you a little.

play08:47

Let's suppose if, where do we write, here we write, someone wrote x which is equal to a plus b star c followed by semicolon.

play08:57

Suppose this is written somewhere in this program, then how will the assembly language be converted?

play09:03

This is a mnemonic, I am writing here, what will happen is that first of all b into c, what we will do is multiply.

play09:09

For that, what is your mnemonic, it is your multiplication of, here the register is r0 and this is r1.

play09:16

So we are assuming that the value in r0 is b and in r1 is c.

play09:21

These two multiplied and stored in r1.

play09:23

Okay, this is the multiplication.

play09:25

Now what will be the value that will be added in this?

play09:28

In a.

play09:29

So let's write the next line here, add.

play09:31

And here let's suppose we have taken another register, r2 and here we have taken r1, sorry r0.

play09:37

What is in r0?

play09:38

b into c.

play09:39

So the value of r0 and r2 will be added.

play09:41

Okay.

play09:42

What will be the storage in this?

play09:43

R2.

play09:44

After that what we have to do is move.

play09:46

Move x comma r2.

play09:49

So what is this?

play09:50

It is your assembly code.

play09:51

Okay.

play09:52

This is not so important to understand.

play09:53

Just for the sake of completion, we have told this thing that if any expression has been written in this way, then you will see the assembly code in this way.

play10:01

Now see, here the story starts.

play10:04

Now what happened?

play10:05

Relocatable code.

play10:06

For whom is the input?

play10:07

Linker.

play10:08

What will be the output?

play10:09

That too will be relocatable code.

play10:10

Relocatable machine code.

play10:14

So what is the difference between these two?

play10:16

It is very important to understand this.

play10:17

This is a very important point.

play10:18

See, let's suppose we are not talking about a program.

play10:21

Let's suppose you have a project.

play10:23

So how many files can be in the project?

play10:25

There can be a lot of files.

play10:26

Let's assume there are thousand files.

play10:28

Let's take this assumption.

play10:29

So now there are thousand files.

play10:32

So what does the linker do?

play10:34

Linker.

play10:35

Now suppose that.

play10:36

We have a requirement of only 600 files to run a project.

play10:41

And what will we do with it?

play10:42

We will link it and execute it.

play10:45

So whatever files come up to here, they are all multiple files.

play10:49

What does the linker do?

play10:50

It converts it to single relocatable machine code.

play10:55

Because when we have to run any project, we need a single file to execute at the end.

play11:00

Ok.

play11:01

What happens here?

play11:02

What is the output of the assembler?

play11:03

There are multiple files in it.

play11:05

How many files are there?

play11:06

There are 100 files.

play11:07

Then how many can be linked together?

play11:08

There are 500 files in it.

play11:09

And in many cases, we use lounges.

play11:10

Let's say this is broken.

play11:11

Where can the flasher form are needed?

play11:12

It will take 600 files and remove it.

play11:13

And there will become a single player.

play11:14

But now what happens to all the files?

play11:15

What happens in a single play?

play11:16

There is a single

play11:32

idea of any file.

play11:33

It can be put outside of the environment.

play11:34

That is fine.

play11:35

Now see here, what is the output of the compiler here, this is also multiple, multiple assembly language, you will get assembly code, language means code.

play11:45

Here you are not getting a single file, here also what will be your multiple, here also what will be multiple, so write multiple everywhere.

play11:56

Because in a project there may be multiple high level language, we are not talking about a single program, if we take an example of a project, then there will be more clarity, what is the meaning of linker.

play12:05

What will the linker do, the multiple relocatable machine code, which is the output of the assembler, all the required files in it to execute the program,

play12:15

what will it do, it will convert it into a single relocatable file, after that what will it do, now what will it have to do, it will have to run, then the loader comes in the picture.

play12:23

What does the loader do, that single relocatable machine code,

play12:26

takes the code and converts it into exe, dot exe file is converted, now what do we call it, absolute machine code, absolute machine code.

play12:40

Ok, so let's revise it again quickly, multiple high level language, preprocessing, what will it do, file inclusion, macro expansion,

play12:49

there will be no computation, there will be only substitution, what does the compiler do, it converts multiple pure high level languages,

play12:55

multiple assembly files.

play12:56

What does the assembler do, the assembler converts all these assembly languages into multiple relocatable machine codes.

play13:04

Now what do we have to do, we have to execute all those relocatable machine codes that we have, so if we take all the files, then it will not be very efficient,

play13:15

so what comes to your linker, the linker comes in the picture, what does the linker do, it converts all these multiple relocatable machine codes into single files.

play13:25

And what does this single file loader do, it loads it.

play13:28

So this was the compiler, what is the work of the compiler, it converts your source code, that is, your high level language, into low level language.

play13:36

And one more important point, that if suppose that this is your program written in C, if there is any error in it, error means mainly syntax error,

play13:44

so syntax error means, for example, we forgot to write semicolon, ok, so according to this, C programming, see, C compiler means it is a set of rules,

play13:53

that under this rule, it is a set of rules.

play13:54

That under this rule, according to this C rule, if we are completing the statement here, then there should be a semicolon.

play14:03

If the semicolon is missed, then what will it do, it will show an error, and the error shows the user.

play14:08

So what does the user do, by modifying it, the line number is written, how all those things come, in which line there is an error, how it will be resolved,

play14:14

who reflects the user, we will discuss all those things in the next video.

play14:18

So the compiler mainly has two jobs, the compiler converts the source code into target code,

play14:24

if there is any error in it, for example, then it will compile and show you an error, it will not convert into machine code.

play14:30

So two important points, what does it do, it does translation, it converts into machine code, if there is an error in it, then it will not be able to do it,

play14:36

so if the program is error-free, then it will convert you into machine code, that means it will give you this code and you can execute it.

play14:45

Last important point, these three modules, assembler, linker and loader, these compilers are called cousins of compiler.

play14:53

Note down somewhere, they are called cousins of compiler, okay.

play14:57

Assembler, linker and loader, these are all cousins of compiler.

play15:01

This is the definition of the basics, how it works, and this whole scenario, from the starting, pre-processor, you have got .exe file,

play15:11

what do you call it, language processing system, okay.

play15:16

I don't have space to write, you write it, language processing system.

play15:20

So if you are asked a question, what is language processing system?

play15:23

So you will write all these things, that's it.

Rate This
β˜…
β˜…
β˜…
β˜…
β˜…

5.0 / 5 (0 votes)

Related Tags
CompilersHigh-Level LanguagesMachine CodeProgrammingSoftware DevelopmentCode TranslationPreprocessorAssemblerLinkerLoaderLanguage Processing