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

Dokładne wyjaśnienie składni w własnym języku programowania

Object Storage Arubacloud
0 głosów
237 wizyt
pytanie zadane 14 kwietnia w Inne języki przez Infos Użytkownik (650 p.)

Witam,w tym poście chciałbym się dowiedzieć pewnej rzeczy otóż chce się do6wiec dokładnie jak pisac składnię 

Dostałem takie coś 

 

function execute(code) {
    const variables = {};
    for (const line of code.split("\n")) {
        if (line.includes(" = ")) {
            const [name, value] = line.split(" = ");
            variables[name] = value;
        } else if (line.startsWith("print ")) {
            console.log(variables[line.substr(6)])
        }
    }
}
 
var code = `
a = 5
c = 7
print c
print a
`;
execute(code);

Ale za bardzo nie rozumiem poszczególnych części tekstu jedyne co tu rozumiem to tylko parę rzeczy które ani trochę mi nie pomagają więc reasumując chce wiedzieć coś jak i gdzie a także po co na co i dlaczego (dlaczego raczej nie potrzebuje ale chętnie posłucham ) z góry dziękuję.i tak wiem że powinienem się najpierw nauczyć dokładnie programować ale poprostu dopóki się nie dowiem to nie odpuścze bo chciem to Wiedzieć oraz wiem że to bardzo trudne ale napewno ktoś bedze umiał mi pomóc   

komentarz 14 kwietnia przez Sefinek Obywatel (1,480 p.)

Ten mój komentarz, odnoszący się do stereotypu szybkiego przyswajania wiedzy przez osoby z zespołem aspergera, wydaje się być moim zdaniem neutralny; nie miał na celu wywołania negatywnych emocji ani obrażenia kogokolwiek. Często w publicznych dyskusjach mogą pojawiać się nieporozumienia wynikające z różnic w interpretacji wypowiedzi, zwłaszcza w kontekście tak delikatnych tematów. Moim zdaniem przesadzasz.

posłuchaj mój wiek ale nie mój charakter 

Nie odniosłem się nigdzie do twojego charakteru, ani go nie skomentowałem 

komentarz 14 kwietnia przez Infos Użytkownik (650 p.)
Dobrze powiedziane to co na końcu zacytowałes odnosi się do mojego komentarza z tyn twoim komentarzem to nie mam zdania został ukryty bo został uznany za obraźliwy i tyle
komentarz 14 kwietnia przez Infos Użytkownik (650 p.)
W każdym razie mnie to nie obchodzi zadałem pytanie i jedyne co mnie obchodzi to odpowiec lub podpowiedź odnośnje mojego pytania
komentarz 15 kwietnia przez Oscar Nałogowiec (29,320 p.)
edycja 15 kwietnia przez Oscar

@Infos, są odpowiednie metody opisania składni np. Notacja Backusa-Naura. Nie opisuje się jej programem ją analizującym - bo to byłby rodzaj inżynierii odwrotnej. Na podstawie opisu formalnego pisze się program, nie odwrotnie.

Sam sposób napisania programu też zależy od tego, co to ma być - jeśli chcesz zbudować kompilator to trzeba wczytać plik źródłowy, analizując go po drodze, co zwykle realizuje automat skończony sterowany poszczególnymi wczytanymi literkami. Python może być tutaj wyjątkiem bo w nim podział programu na linie na duże znaczenie. W większości języków nowa linia to po prostu separator jak każdy inny. W trakcie parsowania budujesz strukturę opisującą kod i zmienne, poszczególne instrukcje z uwzględnieniem ich hierarchi (czyli to zwykle będzie rodzaj drzewa) - co zawiera się w czym, typu blok zawiera instrucje podstawienia, wywołania funkcji, blok zawarty jest w pętli while, a ta w if. Zauważ że typowe języki mają dość ograniczoną liczbę instrukcji 'wbudowanych' - nawet tylko  kilkanaście. Reszta to po prostu obliczanie wyrażeń i użycie jakiś konstrukcji wcześniej zdefiniowanych, np. funkcji. Potem można taką strukturę 'wykonać' - czyli uruchomić na niej interpretor lub skompilować - czyli wygenerować na jej podstawie kod wynikowy. Zdarza się, że kod wynikowy to nie jest od razu kod binarny dla maszyny, ale coś pośredniego np - kod w C, bytecode itp. Pamiętam, że na studiach robilismy w ramach ćwiczeń translatory z jednego języka na inny, oczywiście takie studenckie, uproszczone maksymalnie.

komentarz 15 kwietnia przez Infos Użytkownik (650 p.)
Rozumiem dzięki

1 odpowiedź

+1 głos
odpowiedź 14 kwietnia przez wizarddos Nałogowiec (26,050 p.)
wybrane 14 kwietnia przez Infos
 
Najlepsza

Tbh wygląda to trochę jak próba napisania prostego interpretera do czegoś pythono-podobnego w JSie

Zaczynając od początku

var code = `
a = 5
c = 7
print c
print a
`;
execute(code);

Tworzymy nową zmienną i przypisujemy jej stringa z kodem - potem wykonujemy kod

Myślę że możnaby tu użyć `const` zamiast `var`

 

Dalej w stricte funkcji `execute`

const variables = {};

Tworzymy nowy pusty obiekt o nazwie `variables`

for (const line of code.split("\n")) {

Rozbijamy to co nam przyszło w argumencie na linie (szukając nowej linii - tzw. "newline escape sequence") i dla każdej linii od góry wykonujemy kod. Tak działają języki interpretowane

        if (line.includes(" = ")) {
            const [name, value] = line.split(" = ");
            variables[name] = value;
        }

W if'ie szukamy znaku `=` -> zmiennej

Gdy ją znajdziemy rozbijamy linię na parę nazwa-wartość przy użyciu String.prototype.split

Druga opcja - wyświetlenie stringa

else if (line.startsWith("print ")) {
            console.log(variables[line.substr(6)])
        }

Szukamy czy linia zaczyna się od `print ` a jeśli tak to wyświetlamy zawartość obiektu `variables` dla klucza pozyskanego z obcięcia pierwszych 6 znaków z stringa (czyli `print `)

Poza tym, substr() ma już status "Deprecated" i lepiej stosować "substring()" albo `slice()`

 

Ale za bardzo nie rozumiem poszczególnych części tekstu jedyne co tu rozumiem to tylko parę rzeczy które ani trochę mi nie pomagają

Po to istnieje coś takiego jak Google - można wpisać np. for-of js i masz koło 3,770,000,000  wyników omawiających właśnie to

komentarz 14 kwietnia przez adrian17 Ekspert (346,320 p.)

Tbh wygląda to trochę jak próba napisania prostego interpretera do czegoś pythono-podobnego w JSie

Tak, bo napisałem to dosłownie "na kolanie" w poprzednim pytaniu tego samego autora (wcześniej dzisiaj) :P Żeby pokazać że nie trzeba niczego specjalnego żeby zrobić prymitywny "własny język".

https://forum.pasja-informatyki.pl/592896/jak-powstaly-jezyki-programistyczne-i-jak-stworzyc-taki-jezyk?show=592922#c592922

1
komentarz 14 kwietnia przez wizarddos Nałogowiec (26,050 p.)
Faktycznie, nie widziałem poprzedniego pytania z tej "serii' :P

Mógł się chociaż dopytać co w kodzie się dzieje w tamtym wątku, nie trzeba tworzyć kolejnego pytania
1
komentarz 14 kwietnia przez Infos Użytkownik (650 p.)

@wizarddos, dziękuję naprawdę mi to pomogło 

Podobne pytania

+2 głosów
1 odpowiedź 390 wizyt
0 głosów
1 odpowiedź 126 wizyt
0 głosów
1 odpowiedź 65 wizyt

92,666 zapytań

141,564 odpowiedzi

320,021 komentarzy

62,033 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

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!

...