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

własny jezyk programowania-pozycje dwóch operatorów

Aruba Cloud - Virtual Private Server VPS
0 głosów
175 wizyt
pytanie zadane 25 kwietnia 2024 w JavaScript przez niezalogowany

witam razem z chatem gbt mamy problem z pewną rzeczxą 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Interpreter języka</title>
</head>
<body>
    <h1>Interpreter języka</h1>

    <script>
        // Tworzenie obiektu reprezentującego interpreter języka
     let interpreter = {
            parse: function(code) {
                let tokens = code.split(' ');
                let opr2 = parseFloat(tokens[2]); 
                let opr1 = parseFloat(tokens[0]); 
                let opr = tokens[1];
                let oprText = tokens.slice(1).join(' ');
                return { opr1, opr2, opr, oprText };
            },
        
            // Funkcja wykonująca operację na podstawie sparsowanego kodu
            execute: function(parsedCode) {
                switch (parsedCode.opr) {
                    case '+':
                        return parsedCode.opr1 + parsedCode.opr2;
                    case '++':
                        return (parsedCode.opr1 + parsedCode.opr2) * 2;
                    case 'write':
                        return parsedCode.oprText;
                    default:
                        throw new Error('Nieznany operator: ' + parsedCode.opr);
                }
            }
        };

        let code = 'write hello';
        
        let parsedCode = interpreter.parse(code);
        let result = interpreter.execute(parsedCode);
        console.log('Wynik:', result); // Oczekiwany wynik: 8
    </script>
</body>
</html>


jak widac albo i nie nie moge z chatem gbt rozwiązac problemu bo jak działa write to plus nie działa ze wzgledu na pozycje tokenów z ifami itp próbowalismy ale nic a jak plus działa to nie działa write bo nie istnieje operator hello

1 odpowiedź

+1 głos
odpowiedź 25 kwietnia 2024 przez Comandeer Guru (606,480 p.)
wybrane 25 kwietnia 2024
 
Najlepsza

Bo masz parser typowo pod najprostsze operacje matematyczne. Jedyne, co potrafi parsować, to wyrażenia typu

45 ++ 34

Żeby to parsowało bardziej złożone rzeczy, musiałoby wyglądać tak po prawdzie zupełnie inaczej. Dzielenie po spacji mogłoby zostać, ale tokeny musiałbyś raczej analizować po kolei. I na tej podstawie mógłbyś dopiero stwierdzać, co trzeba z tym zrobić. Np. takie coś jak powyżej:

  1. pierwszy token: liczba – odkładasz na jakiś stos tokenów
  2. operator ++ – a więc wiesz, że to prawdopodobnie wyrażenie, do którego należy też poprzedni token
  3. kolejna liczba – w tym momencie masz pełne wyrażenie

Dla takiego write logika będzie za to inna, bo write jest pierwsze w wyrażeniu, a za nim następuje jakaś wartość, która ma być wypisana.

No i już na tak prostej składni masz tak po prawdzie potrzebę konstruowania jakiegoś AST/CST, żeby wiedzieć, co tak faktycznie sparsowany kod przedstawia. Dopiero mając wiedzę o tym, jesteś w stanie wykonywać ten kod.

komentarz 25 kwietnia 2024 przez niezalogowany
dziekuje za pomoc

Podobne pytania

0 głosów
1 odpowiedź 537 wizyt
0 głosów
3 odpowiedzi 891 wizyt
pytanie zadane 13 marca 2018 w C i C++ przez Adam Zajler Nowicjusz (120 p.)
–1 głos
1 odpowiedź 206 wizyt

93,324 zapytań

142,323 odpowiedzi

322,389 komentarzy

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...