Wątek przeniesiony 2020-05-05 13:49 z Inżynieria oprogramowania przez Shalom.

Mercury - mój projekt nowego języka programowania

6

Ostatnio rozpocząłem prace nad całkiem nowym językiem programowania, o nazwie Mercury. Program Hello, world. jest w już stanie działać na aktualnej wersji interpretatora, i wygląda on następująco:

ECHO Hello, world.

Stałych, używa się w ten sposób:

CONST X IS 10
ECHO X=%X

Zmienne wypisuje się trochę inaczej:

SET Y TO 20
ECHO Y=$Y

Komentarze wyglądają dokładnie tak jak w Pythonie:

#a comment

Jest jeszcze komenda zatrzymująca program:

STOP

Operacje matematyczne:

SET A TO 1
CONST B IS 7
ADD 30 TO A
SUBTRACT %B FROM A
MULTIPLE A BY 8
DIVIDE A BY 4

Instrukcje warunkowe:

CONST A IS 4
IF %A EQU 4
ECHO Okay.
ENDI

Pętle:

REPEAT 5
ECHO ....5 times...
ENDR
#albo:
WHILE $N NEQ 5
ECHO only one time
SET N TO 5
ENDW

Inkrementacja/dekrementacja:
screenshot-20200507103747.png

Nowy przykład współdziałania aktualnych instrukcji:

REPEAT 10
 SET X TO $.
 #zmienna $. jest licznikiem pętli
 INC X
 ECHO $X
 IF $X EQU 5
  #dostępne są jeszcze NEQ, LSS, GTR, LEQ, GEQ i NOT (negacja wyrażenia). Reszta operatorów logicznych będzie zaimplementowana do jutra.
  ECHO Halfway done!
 ENDI
ENDR
STOP

Screenshot:
screenshot-20200508110034.png
Przykład Hello world nadal zostaje
screenshot-20200505125922.png

1

Jak to działa pod spodem?

2

Proponuję zmienić nazwę, bo jest już jeden Mercury. Kiedy wersja na Linuksa?

3

Mercury kojarzy mi się z rtęcią, czyli zabójczą substancją używaną w klasycznych termometrach. A także z dość nieprzyjazną planetą Temperatura powierzchni waha się od −173 °C do 427 °C https://pl.wikipedia.org/wiki/Merkury

2

Ciekawy pomysł, życzę powodzenia w projekcie. A można wiedzieć skąd nabyta taka wiedza? :)

8

Instrukcje pisane dużymi literami przypominają dziadka BASICA, a sama konstrukcja wyrażeń z kolei pradziadka COBOLA. To w dzisiejszych czasach raczej dobrze się nie kojarzy. Nie musisz przecież używać dużych liter.

Pisanie „interpretatora” to dobre ćwiczenie, szczególnie, jeśli wybiera się taką drogę, która pozwala nauczyć się wielu nowych rzeczy. Tak więc plus za chęci, ale pasowałoby pochwalić się kodem źródłowym, jeśli już mamy cokolwiek oceniać.

2

Nie wybrałbym języka w którym przypisanie jest takie verbose, tzn 5 znaków "Set to" zamiast =. Najczęstsze operacje powinny być najszybsze.
. I nie podoba mi się że printowanie na ekran (echo) to słowo kluczowe albo jakąś operacja, jak w php. Czemu interpreter powinien widzieć o czymś takim? Dużo lepiej jakby to była funkcja (jak print() w Pythonie albo gdybyś dostał std out, jak System.out w Javie).

Printowanie na std out to nie jest cobtrol statement jak return/throw.

Swoją drogą, pomyśl o wyjątkach i przestrzeniach nazw.

Pisanie wielkimi literami kojarzy mi się z takimi językami jak cobol. W nowoczesnych językach nie trzeba oddzielać elementów języka od konstrukcji usera wielkością liter bo programiści już dawno nauczyili się to rozróżniać.

2

Pisanie pełnymi słowami jeszcze jest ok, tylko mam spostrzeżenie.
ENDR, ENDI, ENDW - skoro już piszemy pełnymi słowami, to ja bym wolał napisać dokładnie co kończy END:

FOR cośtam
LOOP
END LOOP

albo

FOR cośtam
END FOR

Albo w ogóle można zostawić samo END. W takim języku szybko wyjdą tasiemce wychodzące poza ekran, więc i tak nie będę widział jaką pętlę kończy ENDR.

7

Wygląda mocno COBOLowo. Jeśli to COBOL done right to proponuję nazwę COBOL#, a jeśli to ma być tylko COBOL with classes to wystarczy COBOL++ .
:)

0

A implementujesz to na pałke ifo-drabinkowo, czy generujesz parser w C jak powinno sie robić ;p ? Może dlatego nie chcesz skomplikowanej składni?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0