What do I need to read in in order to :
- understand the specs of an already made programming language
- Design a programming language
- Design a compiler and assembler for that language
- make an architecture of a processor
Computer Science Stack Exchange is a question and answer site for students, researchers and practitioners of computer science. It only takes a minute to sign up.Sign up to join this community
What do I need to read in in order to :
I know you mean, it is not an easy task, yet you can do it.
For point 1: You can do that by:
For point 2: Designing a programming language is not an easy task, you need to consider what your programming language will add, are what it adds already there in another programming language? Why people will use it? What is the problem your programming language will solve?.
If you answered all of the above questions, then let's move on to see wow are you going to make it.
There are a lot of online courses about programming language design.
First of all the structure; will it use compiler or interpreter, will it have a virtual machine or it will will run natively on the OS, what will be the steps of building and running the code
Does the programming language will be high level or low level or middle?
For point 3: If you want to design a compiler, then there is a whole life out there, this science already settled, you will have to make the grammar tree and the dependency. You studied Assembler before, there is another course for compiler, it is basicly the same concept but it is harder because you will have grammar here.
Many many courses are out there specially for the purpose you want, just search with keyword compilers.
For point 4: This point is out of the above scope, it is on the other side, if you are concerned about creating a new programming language, then you shouldn't worry about the processor architecture unless your language is a low level programming language. Mainly, it is another track if you want to design your own architecture, there are many steps to design a processor's architecture:
I am not an expert in all of that, but I answered it from my humbled experiences, I hope I benefits you, if I have anything more, I will edit the answer to add it isA.
Please feel free to discuss anything with me.
I do not understand what is your intended meaning in "understand the specs of an already made programming language". There are always many things to be understood in a complex entity, and any understanding must be related to a purpose.
If your purpose is just to understand how to program with this language, understanding how it is implemented is not, and should not be your problem. Certainly not at first. What you have to understand is the high level concepts used in the language, and that may depend very much on the language. You need to understand the style of programming the language is promoting. All that comes to some extent with the manuals and tutorials. But some concepts may require advanced knowledge, some of which may be general, and some which may be very specific. What you should learn will be clear from the manuals and tutorials.
If you want general knowledge on language architecture, on the role of syntax and semantics, on the main techniques useful to write compilers and interpreters, you should get a book on compiler writing. Many will do. The most popular is probably the Dragon Book in one of its successive edition.
To design a programming language, there is no specific study, other than a good understanding of the structure and concepts used generally in programming languages (see above). A good knowledge of logic and mathematical style cannot hurt. Knowing many programming languages with preferably very different styles is probably a prerequisite. The hard part is knowing why you want to do it, and what for. A language is a vehicle for communication. Hence, if you are alone using it you are wasting your time (unless it is a proof of concept, which is usually related to some advanced theoretical work). You have to have a purpose for your language, and an idea that it is better for that purpose than other languages that may already exist. If you still have to read what is useful for designing it (other than general knowledge - see above), you are not ripe for designing one. The needed knowledge must precede the intent to design a language. It must be the expression of a need, before it becomes a will. Actually this is often true of creative activity.
Languages are not necessarily general purpose languages. They may be very useful without having Turing power. A language must be thought to express some concepts in a given domain of discourse. For example, languages like HTML, or TeX. are intended to express textual layout of documents. They can be very sophisticated, but not intended to write graph algorithms or matrix processing. Other languages may appear like weak algorithmic languages because they have been designed to posses specific properties that more general languages will not have, such as automatic analysis of their computational characteristics. Some languages may use specific kinds of parallel processing that are easier to analyze and optimize.`Some of these specific languages, or some features of more general languages require high mathematical sophistication in specific domains. Naming them here would just be name dropping.
Regarding processor architecture, I cannot help you. It is largely a different topic, though it does matter for some aspects of compiling, and I am not competent.
If you want to see an interpreter written in half a page, that implement a general purpose programming language that was actually used a lot (in more sophisticated versions, to be honest), look for the Lisp 1.5 interpreter. It is somewhere in this old book.