• 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

Object Storage Arubacloud
0 głosów
101 wizyt
pytanie zadane 25 kwietnia w JavaScript przez Mist Użytkownik (720 p.)

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 przez Comandeer Guru (601,930 p.)
wybrane 25 kwietnia przez Mist
 
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 przez Mist Użytkownik (720 p.)
dziekuje za pomoc

Podobne pytania

0 głosów
1 odpowiedź 206 wizyt
0 głosów
3 odpowiedzi 594 wizyt
pytanie zadane 13 marca 2018 w C i C++ przez Adam Zajler Nowicjusz (120 p.)
0 głosów
1 odpowiedź 322 wizyt
pytanie zadane 3 sierpnia 2017 w Nasze projekty przez niezalogowany

92,617 zapytań

141,466 odpowiedzi

319,783 komentarzy

61,999 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!

...