• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Mój pomysł na zrobienie języka kompilowanego - czy to ma sens?

Object Storage Arubacloud
+3 głosów
360 wizyt
pytanie zadane 29 listopada 2018 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 8 grudnia 2018 przez Jakub 0

Witam, od jakiegoś czasu interesuje mnie pisanie parserów języków. Właśnie kończę ten poradnik: http://informatyka.wroc.pl/node/391

Mam plany na wiele projektów... chcę się za niedługo wziąć za pisanie własnego interpretera Brainfuck'a, a w niedalekiej przyszłości również języka opisowego dla moich programów w SFML oraz zrobić coś w stylu języka edukacyjnego Logo. Jest tego sporo ale przynajmniej już wiem "z czym się do je" i jak za takie projekty w ogóle się zabrać.

Będą to oczywiście języki interpretowane i wykonywane przez gotowy program napisany np. w C++. Tzn. że nie będą w nich powstawać niezależne programy tylko bardziej coś w formie skryptów.

Wszyscy mówią że do zrobienia kompilatora trzeba znać mega dobrze assembler, architekturę procesora itd... Mam jednak taki abstrakcyjny i czysto teoretyczny pomysł jak zrobić w przyszłości kompilator dla programów w moim języku bez znajomości ASM'a.

No więc tak...

Parser generuje na podstawie składni konkretnej składnie abstrakcyjną, czyli tworzy formę zwaną drzewem programu. Drzewo może zrobić parser ale możemy je też napisać sami:

Program* p = new Composition(
    new Assign("i", new Constant(0)),
    new Whaile(
      new Binary_operator('-', new Constant(10), new Variable("i")),
      new Composition(
        new Write("i"),
        new Assign("i",
          new Binary_operator('+', new Variable("i"), new Constant(1)))
      )
    )
  );
 
  Memory m;
  p->eval(m);

Gdyby tak zamiast zrobić klasyczny parser który dynamicznie w chwili działania programu tworzy drzewo, stworzyć program który w osobnym pliku np. *.cpp napisze taką strukturę co widzicie powyżej w postaci tekstu... Potem trzeba tylko skompilować powstały plik *.cpp wykorzystując już istniejący kompilator języka C++. ( oczywiście wszystkie kroki będą przebiegały automatycznie wykonując się w jakimś skrypcie ).

Najprościej mówiąc chodzi mi o to żeby zamiast kompilować bezpośrednio kod w naszym języku, można by było go przetłumaczyć na kod innego języka który już posiada kompilator.

Wiem oczywiście że to nie jest wydajne rozwiązanie, jednak jest ono w zasięgu mojej wiedzy. Jedynym ograniczeniem jest tylko mój intelekt przy konstruowaniu parsera ;)

Co o czymś taki sądzicie? Przypuszczam że ameryki nie odkryłem... jak się więc takie rozwiązanie profesjonalnie nazywa? Czy są technologie które działają w ten sposób? Oczywiście przypominam że tylko sobie tak gdybam bo na razie wystarczy mi zrobić zwykły interpreter.

Z góry dziękuję za informacje i opinie oraz pozdrawiam serdecznie :)

 

komentarz zamknięcia: temat wyczerpany
1
komentarz 30 listopada 2018 przez KubenQPL Maniak (62,820 p.)
Polecam książkę Gynvael'a Coldwina "Zrozumieć programowanie" może cię zainteresować bo w podobnej tematyce, są tam też podobne zadania.

2 odpowiedzi

0 głosów
odpowiedź 30 listopada 2018 przez j23 Mędrzec (194,920 p.)
wybrane 8 grudnia 2018 przez Jakub 0
 
Najlepsza

Co o czymś taki sądzicie?

Trochę bez sensu, bo twój kompilator generowałby drzewo AST w postaci kodu C++, które później byłoby kompilowane do binarki i uruchamiane. Sensowniej byłoby, gdyby kompilator generował kod C++ na podstawie utworzonego drzewa.

0 głosów
odpowiedź 29 listopada 2018 przez Ehlert Ekspert (212,670 p.)
edycja 29 listopada 2018 przez Ehlert

Widzę że masz pomysł, ambicje oraz fantazję. Pytanie czemu to miałoby służyć. Na Twoim miejscu skupiłbym się na bardziej "przyziemnych" rzeczach(o ile można tak nazwać tematykę projektowania parserów i kompilatorów). Proponuję mimo wszystko zainteresować się np Bisonem.

zamiast kompilować bezpośrednio kod w naszym języku, można by było go przetłumaczyć na kod innego języka który już posiada kompilator.

 Tak działają kompilatory. Twój język - > asembler - >kompilacja. 

2
komentarz 29 listopada 2018 przez Tnifey Pasjonat (24,190 p.)
czy to się nie nazywa transpiler? coś jak babel i js / typescript i js?

Podobne pytania

0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 19 marca 2018 w Nasze projekty przez Secrus Nałogowiec (32,880 p.)
+1 głos
1 odpowiedź 293 wizyt
pytanie zadane 11 lutego 2019 w Nasze projekty przez niezalogowany
0 głosów
2 odpowiedzi 575 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...