To make a programming language, you have to make 3 main parts, the lexer, the parser, and the evaluator or compiler, to make these, you need to know how to code, if you do, then continue reading.


In the lexer or tokenizer, you make tokens that the lexer will use to split the program into tokens, and you need to also add a thing that makes it so that the lexer will recognize the token, which can be a RegEx (or Regular expression), this is an example of some tokens:

{"print":/print/, "string":/\"[^\"]*\"/}

you can put something like that inside a variable and you use that later, you can call it TokenTypes.

In the parser, you make nodes that make the tokens into a syntax tree, or abstract syntax tree (or AST), here's an example of some nodes:

{"printStm":{"a":"string"}}

you can put something like that inside a variable and you use that later, you can call it node types

In the Evaluator, you make code for the nodes, here's an example of some code:

{"printStm":print(this.a)}

you can p::ut something like that inside a variable and you use that later, you can call it Eval


That is how to make (the 3 main parts of) a programming language


Part 2, actually making the code:

To make the code, of course, you need to be able to code, but you should not be reading this if you did not, because you read that you needed to be able to code, so, to make the code, you do this:

TokTyp={"print":/print/, "string":/\"[^\"]*\"/}

NodTyp={"printStm":{"a": TokTyp.string}

Eval={"printStm":print(NodTyp.printStm.a)