Discuss Scratch

nickeljorn
Scratcher
1000+ posts

I want to make a programming language...

I want to make a programming language, but I don't know how.

“I am OK! You are OK!”-Makiko Ohmoto
“Where have I seen a hat like that before, I wonder…?”-The Nintendo Badge Arcade Bunny
“Brand-new seafood thrown up on the beach”-Mother 2 strategy guide
“Nintendo is not just a game but with full of love
It brings tear to me …”-I So Onett
NitroCipher
Scratcher
500+ posts

I want to make a programming language...

A programming language of your own? Or an interpreter of an existing one?

I hope my post helped you in some way! Post count: 400+

Current project: [s3Blocks: scratchblocks rewritten for Scratch 3.0] ::extension //https://scratch.mit.edu/discuss/topic/290031/
This is my signature identifier “aWFtbml0cm9jaXBoZXI=”
nickeljorn
Scratcher
1000+ posts

I want to make a programming language...

NitroCipher wrote:

A programming language of your own? Or an interpreter of an existing one?

A new programming language.

“I am OK! You are OK!”-Makiko Ohmoto
“Where have I seen a hat like that before, I wonder…?”-The Nintendo Badge Arcade Bunny
“Brand-new seafood thrown up on the beach”-Mother 2 strategy guide
“Nintendo is not just a game but with full of love
It brings tear to me …”-I So Onett
MegaApuTurkUltra
Scratcher
1000+ posts

I want to make a programming language...

Racket

cute cute cute cute cute

rip in pizza ATs
TheAspiringHacker
Scratcher
100+ posts

I want to make a programming language...

Do you want to make a specification (a formal document outlining the definition of the language) or an implementation (software that understands programs written in the language)?

“…the keynote speaker asked the audience to indicate by show of hands, one, how many people disliked C++, and two, how many people had written a C++ program. There were twice as many people in the first group than the second. Expressing dislike of something you don’t know is usually known as prejudice.” - Bjarne Stroustrup
ScratchMan544
Scratcher
100+ posts

I want to make a programming language...

If you're actually looking at the implementation of programming languages:

I'll start with an example from a fake language. The program string is this:

let i = 0;
while i < 100 {
print("Number " + i.to_string());
i += 1;
}

The first step is to convert the program into small lexical units, called tokens. The internal representation for tokens might look something like this:

KEYWORD_LET
IDENTIFIER "i"
ASSIGN
NUMERIC_LITERAL 0
SEMICOLON
KEYWORD_WHILE
IDENTIFIER "i"
LESS_THAN
NUMERIC_LITERAL 100
OPEN_BRACE
IDENTIFIER "print"
OPEN_PARENTHESIS
STRING_LITERAL "Number "
PLUS
IDENTIFIER "i"
ATTRIBUTE "to_string"
OPEN_PARENTHESIS
CLOSE_PARENTHESIS
CLOSE_PARENTHESIS
SEMICOLON
IDENTIFIER "i"
PLUS_EQUALS
NUMERIC_LITERAL 1
SEMICOLON
CLOSE_BRACE

Next, you convert this to a tree that represents the structure of the program. This requires knowing about things like operator precedence.

[
(declare "i" (numeric-literal 0)),
(while-loop (less-than (var "i") (numeric-literal 100) [
(call-function (var "print") [
(plus (string-literal "Number ")
(call-function (property "to_string" (var "i")) []))
]),
(plus-assign "i" 1)
]
]

Now, at this point you have a few options:

  • You can execute this tree directly, which is oftentimes slower but simpler and more direct (this is an interpeter).
  • You can translate it into an even lower-level representation (this is a compiler). This often requires going through at least one more intermediate representation.

Last edited by ScratchMan544 (Dec. 8, 2017 08:09:52)


_=(lambda _:lambda __:_(__))(lambda _:getattr(_,(
    lambda _:_[:2]+str(print.__call__)[0b10011:(1+1<<1+1+1)+(1<<1+1)+(1<<1)+1]+_[-2:]
)(__name__)))(eval)
(lambda _:lambda __:_(__))(lambda _:_(_(
    __import__(dir(__builtins__)[((1<<1+1)<<1+1+1)+(1+1<<1+1+1)+(1+1<<1)+(1<<1)][:3].lower()),
    print.__doc__[46:52]),open(__file__).write.__str__()[17:22]))(_("getattr"))((
    lambda _:lambda __:_(_,__))(lambda _,__:""if __==0else chr(__%128)+_(_,__//128))(963149002634454890336513358634316810781103160855182366005237514)[::-1]
)
scorebat
New to Scratch
31 posts

I want to make a programming language...

Why would you want to create a new language?
There are already so many of them.
Scorebat

Scorebat
herohamp
Scratcher
1000+ posts

I want to make a programming language...

scorebat wrote:

Why would you want to create a new language?
There are already so many of them.
Scorebat
For education. Depending on how you write your language, you may need to write a system which compiles it to either binary, or another language that compiles to binary. Or you would need to write a parser
_nix
Scratcher
1000+ posts

I want to make a programming language...

ScratchMan544 wrote:

Next, you convert this to a tree that represents the structure of the program. This requires knowing about things like operator precedence.
It actually doesn't. If you want your programming language to have automatic order of operations (e.g. knowing that 4 + 5 * 2 is 14 and not 18), you'll have to figure out how to implement that (which is operator precedence), but it's not inherently necessary when you're making a programming language!

art blog – My pronouns are they/them, btw. sparrows one word to the paragraph
NickyNouse
Scratcher
1000+ posts

I want to make a programming language...

_nix wrote:

ScratchMan544 wrote:

Next, you convert this to a tree that represents the structure of the program. This requires knowing about things like operator precedence.
It actually doesn't. If you want your programming language to have automatic order of operations (e.g. knowing that 4 + 5 * 2 is 14 and not 18), you'll have to figure out how to implement that (which is operator precedence), but it's not inherently necessary when you're making a programming language!
my order of operations is ltr thank you very much
MegaApuTurkUltra
Scratcher
1000+ posts

I want to make a programming language...

_nix wrote:

ScratchMan544 wrote:

Next, you convert this to a tree that represents the structure of the program. This requires knowing about things like operator precedence.
It actually doesn't. If you want your programming language to have automatic order of operations (e.g. knowing that 4 + 5 * 2 is 14 and not 18), you'll have to figure out how to implement that (which is operator precedence), but it's not inherently necessary when you're making a programming language!
muh lisp
(+ 4 (* 5 2))
(* (+ 4 5) 2)
infix notation was a mistake and we all know it

cute cute cute cute cute

rip in pizza ATs
bobbybee
Scratcher
1000+ posts

I want to make a programming language...

MegaApuTurkUltra wrote:

_nix wrote:

ScratchMan544 wrote:

Next, you convert this to a tree that represents the structure of the program. This requires knowing about things like operator precedence.
It actually doesn't. If you want your programming language to have automatic order of operations (e.g. knowing that 4 + 5 * 2 is 14 and not 18), you'll have to figure out how to implement that (which is operator precedence), but it's not inherently necessary when you're making a programming language!
muh lisp
(+ 4 (* 5 2))
(* (+ 4 5) 2)
infix notation was a mistake and we all know it
Hmmmmmph. I like Scheme. Brian broke me :^)

“Ooo, can I call you Señorita Bee?” ~Chibi-Matoran
TheUltimatum
Scratcher
1000+ posts

I want to make a programming language...

bobbybee wrote:

MegaApuTurkUltra wrote:

_nix wrote:

ScratchMan544 wrote:

Next, you convert this to a tree that represents the structure of the program. This requires knowing about things like operator precedence.
It actually doesn't. If you want your programming language to have automatic order of operations (e.g. knowing that 4 + 5 * 2 is 14 and not 18), you'll have to figure out how to implement that (which is operator precedence), but it's not inherently necessary when you're making a programming language!
muh lisp
(+ 4 (* 5 2))
(* (+ 4 5) 2)
infix notation was a mistake and we all know it
Hmmmmmph. I like Scheme. Brian broke me :^)
Racket.

bf97b44a7fbd33db070f6ade2b7dc549

you get a cookie
bobbybee
Scratcher
1000+ posts

I want to make a programming language...

TheUltimatum wrote:

bobbybee wrote:

MegaApuTurkUltra wrote:

_nix wrote:

ScratchMan544 wrote:

Next, you convert this to a tree that represents the structure of the program. This requires knowing about things like operator precedence.
It actually doesn't. If you want your programming language to have automatic order of operations (e.g. knowing that 4 + 5 * 2 is 14 and not 18), you'll have to figure out how to implement that (which is operator precedence), but it's not inherently necessary when you're making a programming language!
muh lisp
(+ 4 (* 5 2))
(* (+ 4 5) 2)
infix notation was a mistake and we all know it
Hmmmmmph. I like Scheme. Brian broke me :^)
Racket.
Well sure, that's my preferred Scheme of choice, but hey

“Ooo, can I call you Señorita Bee?” ~Chibi-Matoran
MegaApuTurkUltra
Scratcher
1000+ posts

I want to make a programming language...

bobbybee wrote:

TheUltimatum wrote:

bobbybee wrote:

MegaApuTurkUltra wrote:

_nix wrote:

ScratchMan544 wrote:

Next, you convert this to a tree that represents the structure of the program. This requires knowing about things like operator precedence.
It actually doesn't. If you want your programming language to have automatic order of operations (e.g. knowing that 4 + 5 * 2 is 14 and not 18), you'll have to figure out how to implement that (which is operator precedence), but it's not inherently necessary when you're making a programming language!
muh lisp
(+ 4 (* 5 2))
(* (+ 4 5) 2)
infix notation was a mistake and we all know it
Hmmmmmph. I like Scheme. Brian broke me :^)
Racket.
Well sure, that's my preferred Scheme of choice, but hey
me too thanks

cute cute cute cute cute

rip in pizza ATs
TheUltimatum
Scratcher
1000+ posts

I want to make a programming language...

To add to the topic.. I'd recommend this tutorial by Jack Crenshaw. I think it's a really great intro to compiler design. Afterwards if you liked his tutorial I'd reccommend getting Compilers: Principles, Techniques and Tools I own the second edition bought it on amazon for 2$ used not bad at all and the book is great reading material. Though you may have a fun time porting the pre standard C to modern C. A very a good read I'm about a quarter of a way through and already learning all kinds of interesting things.

bf97b44a7fbd33db070f6ade2b7dc549

you get a cookie

Powered by DjangoBB

Standard | Mobile