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

mój projekt - programowanie na stronie

Konkurs Mistrz Programowania
0 głosów
1,974 wizyt
pytanie zadane 29 maja 2024 w Nasze projekty przez niezalogowany
i miałem wrócic z gotowym projektem wiec wracam https://www.nighttree.c4ndy.pl/
komentarz 30 maja 2024 przez VBService Ekspert (256,600 p.)
edycja 30 maja 2024 przez VBService

BTW, dla

let lines = code.split('\n');

sprawdź to

let lines = code.match(/\b\w+:\s*"(.*?)"/g);

 

// test
const code = 'write: "Lorem1";  write:"Lorem2"; write:write:"Lorem3" ;  \nwrite:"Lorem4"; ;';
const arr = code.match(/\b\w+:\s*"(.*?)"/g);
console.log(arr);

 

sprawdź

function interpret(code, console_) {
  const lines = code.match(/\b\w+:\s*"(.*?)"/g); //code.split(' ');
  let cmd = '', match = '';

  for (const line of lines) {
    /* write:"" */
    cmd = /write\s*:\s*"(.*?)"\s*\n?/;
    match = line.match(cmd);

    if (match) {
      console_.innerHTML += match[1] + '<br>';
    }
    /* /write:"" */
  }
}

oczywiście w tej wersji nie są komunikowane błędy składni jak np.:

write:write:"Lorem3" ;

 

No i rozważ:

W zależności od kontekstu oraz specyficznych wymagań, interpreter może działać zarówno w trybie interpretacji linia po linii, jak i znak po znaku. 

Interpretacja linia po linii
Zalety:

  • Czytelność: Łatwiejsze do zrozumienia i debugowania, szczególnie w przypadku dłuższych programów.
  • Efektywność: Szybsze, ponieważ przetwarzane są całe linie kodu na raz.
  • Prostota implementacji: Mniej skomplikowana logika w porównaniu do interpretacji znak po znaku.

Wady:

  • Ograniczona kontrola: Trudniej obsługiwać sytuacje, w których ważna jest precyzyjna kontrola nad każdym znakiem, np. zagnieżdżone struktury lub skomplikowane wyrażenia.

Interpretacja znak po znaku
Zalety:

  • Precyzyjna kontrola: Możliwość dokładnej analizy każdego znaku, co jest przydatne w przypadku złożonych składni.
  • Elastyczność: Lepsze do obsługi bardziej złożonych konstrukcji językowych, takich jak zagnieżdżone wyrażenia lub złożone struktury.

Wady:

  • Złożoność: Trudniejsze do zrozumienia i debugowania, szczególnie w większych programach.
  • Wydajność: Wolniejsze, ponieważ każdy znak musi być przetwarzany indywidualnie.
komentarz 30 maja 2024 przez niezalogowany
no  to co od błedu nadal nie ma . a co do interpretacji chyba lepsza jest ta od góry do dołu
komentarz 30 maja 2024 przez niezalogowany

@VBService,  mam sprawdzic match(regax) bez posrednio ?

komentarz 30 maja 2024 przez VBService Ekspert (256,600 p.)
edycja 30 maja 2024 przez VBService

@Mist, Tak, bo (zobacz na Return Values)

Syntax

string.match(match)

 

Parameters

Parameter Description
match Required.
The search value.
A regular expression (or a string that will be converted to a regular expression).

Return Values

Type Description
An array
or null
An array containing the matches.
null if no match is found.

rozumiem, że nie sposób jest przeczytać wszystko w dokumentacji javascript, ale teraz już wiesz, jaką "moc" posiada string.matchwink

komentarz 30 maja 2024 przez niezalogowany
ok spróbuje
komentarz 30 maja 2024 przez niezalogowany

@VBService, tylko jak mam uzyc tego let lines = code.match(/\b\w+:\s*"(.*?)"/g);to co w przypadku kolejnnych instrukcji

komentarz 30 maja 2024 przez niezalogowany
dobra juz wiem
komentarz 30 maja 2024 przez VBService Ekspert (256,600 p.)

@Mist, Ten kod tylko "wyciąga" instrukcje z <div id="editor">, które są w postaci String-a i zapisuje po wstępnej "obróbce" (usuwa białe znaki, średniki itd.) do tablicy.

// const code = document.getElementById('editor').innerText;
let lines = code.match(/\b\w+:\s*"(.*?)"/g);

 

komentarz 30 maja 2024 przez VBService Ekspert (256,600 p.)

@Mist, W pętli masz kod do interpretacji instrukcji

function interpret(code, console_) {
  const lines = code.match(/\b\w+:\s*"(.*?)"/g);
  let cmd = '', match = '';
 
  for (const line of lines) {
    /* write:"" */
    cmd = /write\s*:\s*"(.*?)"\s*\n?/;
    match = line.match(cmd);
 
    if (match) {
      console_.innerHTML += match[1] + '<br>';
    }
    /* /write:"" */
  }
}

właściwie to można go skrócić i IMO dalej jest czytelny

function interpret(code, console_) {
  const lines = code.match(/\b\w+:\s*"(.*?)"/g); //code.split(' ');
  let match = '';
 
  for (const line of lines) {
    /* write:"" */
    match = line.match(/write\s*:\s*"(.*?)"\s*\n?/);
 
    if (match) {
      console_.innerHTML += match[1] + '<br>';
    }
    /* /write:"" */
  }
}

 

komentarz 30 maja 2024 przez VBService Ekspert (256,600 p.)
edycja 30 maja 2024 przez VBService

Właściwie to tylko taka "zajawka" jakby to mogło wyglądać, bo za pomocą

.match(/\b\w+:\s*"(.*?)"/g)

mamy do dyspozycji składnie:

polecenie:"parametry";
polecenie:"parametry";
polecenie:"parametry"; polecenie:"parametry";
   polecenie:"parametry";

do bardziej rozbudowanej składni, trzeba by było nieco zmodyfikować to wyrażenie regularne (regular expression), więc w pewnym sensie na pierwszy krok wystarczyłby też sam np.:

const code = code.split(';');

 

komentarz 30 maja 2024 przez niezalogowany
rozumiem
komentarz 30 maja 2024 przez VBService Ekspert (256,600 p.)

Nie musisz pisać interpretera jakiegoś nowego rozbudowanego języka, możesz napisać np. język (skryptowy) wspomagający pracę np. chemików (ChemScript*), matematyków, inżynierów (MATLAB**)

* - ChemScript to język skryptowy rozwijany przez firmę ChemAxon, przeznaczony do manipulacji strukturami chemicznymi i analizy danych chemicznych. Jest częścią większego pakietu narzędzi chemicznych.

 

** - MATLAB (Matrix Laboratory) to zaawansowane środowisko programistyczne i język programowania opracowane przez firmę MathWorks. Jest szeroko stosowane w matematyce, inżynierii, naukach przyrodniczych, ekonomii oraz wielu innych dziedzinach wymagających zaawansowanych obliczeń numerycznych, analizy danych, wizualizacji oraz tworzenia algorytmów.

 

komentarz 30 maja 2024 przez niezalogowany
nie musze ale chce .
komentarz 30 maja 2024 przez VBService Ekspert (256,600 p.)
edycja 30 maja 2024 przez VBService

BTW,

sprawdź zapis dla menu z użyciem flex (pełny kod on-line)

  #top-bar {
    width: 100%;
    height: 70px;
    padding: 0;
    margin: 0;
  }
  #top-bar ul {
    display: flex;
    background-color: #F0E68C;
    gap: 1rem;
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
    list-style-type: none; 
  }
  #top-bar ul li {
    width: 100%;
  }
  .buttony {
    background-color: #00FA9A;
    height: 100%;
    width: 100%;
  }
<div id="top-bar">
  <ul>
    <li>
      <a href="https://www.nighttree.c4ndy.pl/projekt.html">
        <button class="buttony">Projekt</button>      
      </a>
    </li>
    <li>
      <a href="https://www.nighttree.c4ndy.pl">
        <button class="buttony">Strona główna</button>      
      </a>
    </li>
    <li>
      <a href="https://www.nighttree.c4ndy.pl/informacje.html">
        <button class="buttony">Informacje</button>      
      </a>
    </li>
    <li>
      <a href="https://www.nighttree.c4ndy.pl/zglaszanie.php">
        <button class="buttony">Zgłaszania Błędów</button>      
      </a>
    </li>
    <li>
      <a href="https://www.nighttree.c4ndy.pl/regulamin.html">
        <button class="buttony">Regulamin</button>      
      </a>
    </li>
  </ul>
</div>

 

komentarz 30 maja 2024 przez niezalogowany
ok spróbuje potem

3 odpowiedzi

+3 głosów
odpowiedź 29 maja 2024 przez Panelinio Stary wyjadacz (10,680 p.)

Co tu dużo mówić - chaos.

Wizualnie to strona leży - tu kontrast, tu kolory się zlewają. Poza tym ciężko się odnajdywać po tej stronie. Podstrony zamieniają się miejscami ("Regulamin" na "srodowisko programistyczne", a w to co kliknę pojawia się "strona główna").

Tu się stopka zlewa na kontener, raz są bordery a raz ich nie ma, niewystylizowane buttony i pola tekstowe.

Słownikowo jak zawsze poszalałeś... Raz używasz polskich znaków, a raz nie (i to w jednym zdaniu).

No i składniowo wygląda to serio średnio. Jakby dwie osoby się głowiły jak poukładać zdania.

Paddingi nie istnieją tam gdzie powinny, używasz "<br><br>" (a ktoś kiedyś napisał tutaj, że za to powinno być więzienie). 

Jak patrzę na tą stronę to przypomina mi się technikum, gdzie tłumaczyłem koledze jak stronka powinna działać od strony mechanicznej, a grafikę to niech sobie na szybko ogarnie - byle by nauczyciel zaliczył zadanie. No i wychodziły takie kontrastowo-zlewające się kwiatki.

Regulamin też jakoś koślawo napisany, ale widać, że coś tam sobie się edukujesz.

Mechanicznie strona działa, mam output z Twojego kodu. Ale właśnie - niby masz dwie podstrony, które powinny coś opowiedzieć o Twoim projekcie. No ale nic nie ma. Jakąś historię, do czego kod może być wykorzystywany, jakie masz zamiary, coś o sobie. Tak po prostu nijak jest i chaotycznie.

Stronę oceniam na WpierwZmontujCośŁatwiejszegoLubPoczytajWięcejKsiążek/10. Któryś raz jednak powtarzam - nie chcemy Ci podcinać skrzydeł. Jedynie chcemy abyś lepiej prosperował ze swoimi projektami

komentarz 29 maja 2024 przez niezalogowany
tak wiem .
komentarz 29 maja 2024 przez niezalogowany

@Panelinio,  Paddingi nie istnieją tam gdzie powinny, używasz "<br><br>" (a ktoś kiedyś napisał tutaj, że za to powinno być więzienie).  to jak to zrobic bo sam juz nie wiedziałem

komentarz 29 maja 2024 przez Panelinio Stary wyjadacz (10,680 p.)

Na chłopski rozum padding to margines do środka. Dzięki temu możesz zrobić fajnie odstępy zawartości od kontenera.

Zamiennikiem dla podwójnego załamania linii (czyli znacznika <br> - break line) mogą być znaczniki <h> lub <p>.

Przy znaczniku <h> dodajesz dodatkowo cyfrę - im większa jej wartość tym mniejszy jest tekst

<h1>Nagłówek</h1>
<h3>Dopisek</h3>

Do tego w CSS'sie możesz sobie pozmieniać wartości - czyli defacto zrobić odstępy od linijek. Sprowadzasz wtedy wszystko do schludności i automatyzacji kodu.

Taka rada - zapoznaj się z Dekalogiem Programisty. Stary wątek tego forum, ale za to jaki przydatny! No i warto prześledzić sobie poradniki Pana Zelenta

komentarz 29 maja 2024 przez niezalogowany
no dzieki . poradniki css prawie wszytskie js tez praiwe wszytskie i html połowe . no dobra musze poprawic troche rzeczy
komentarz 29 maja 2024 przez niezalogowany
zastanawia mnie co lepsze naprawidz strone czy od nowa napisac
+2 głosów
odpowiedź 29 maja 2024 przez AnimaVillis Stary wyjadacz (13,670 p.)
Tej, ale o co chodzi?

Możesz opisać lub nawiązać do jakiejś rozmowy?

Nie każdy śledzi 100% tematów przewijających się na forum..
komentarz 29 maja 2024 przez niezalogowany
a ja ta rozmow nie wazna
komentarz 29 maja 2024 przez niezalogowany
poprostu przedstawiam projeckt
komentarz 29 maja 2024 przez Panelinio Stary wyjadacz (10,680 p.)

@AnimaVillis, Generalnie chłopak przewijał się przez tematy prawne, tworzenia własnego kodu i AI. No i to jest jego wynik końcowy

komentarz 29 maja 2024 przez niezalogowany
jakie ai jakie ai?
komentarz 29 maja 2024 przez Panelinio Stary wyjadacz (10,680 p.)
komentarz 29 maja 2024 przez niezalogowany
to było pytanie jak moje kazde .czemu gdy zapytam sie o cós ktos mysli ze odrazu chce to stworzyc ?
komentarz 29 maja 2024 przez niezalogowany

Także wiem że odpowiedniej wiedzy na to nie mam ale też tego robić w planach nie mam chcie tylko wiedzieć na przyszłość podstawy

+1 głos
odpowiedź 29 maja 2024 przez Comandeer Guru (607,540 p.)

Nie będę się skupiał na stronie, ale bardziej na samym parserze/interpretatorze.

W większości języków białe znaki między operatorem (instrukcją?) a wartością nie mają znaczenia i są interpretowane w dokładnie ten sam sposób, np. echo w PHP. Tutaj białe znaki mają znaczenie:

write:"Hello"; // działa
write: "Hello"; // nie działa

Co więcej, kod jest niepoprawnie parsowany:

write:""heloo";write:"hello";

// zwraca wynik:

"heloo";write:"hello

W takim wypadku IMO powinny stać się dwie rzeczy:

  1. Polecieć powinien syntax error, bo w pierwszym wyrażeniu jest nieparzysta liczba cudzysłowów, ergo – coś jest skopane. Język powinien w tym miejscu wymagać znaków ucieczki dla " wewnątrz tekstu (write:"\"heloo";), zamiast ignorować tego typu konstrukcję.
  2. Przy założeniu, że ten błąd został poprawiony, to powinniśmy otrzymać wynik "heloohello. Tymczasem drugie wyrażenie jest traktowane jako część pierwszego. Co sugeruje, że całość jest parsowana zbyt zachłannym wyrażeniem regularnym – zachłanne vs niezachłanne. Aczkolwiek parsowanie regexem jest i tak dość błędogenne i najczęściej się parsuje np. po znaku, co daje zdecydowanie większą kontrolę nad tym, co możemy obsłużyć. Chociaż, jak patrzę w kod, to nawet nie ma regexów tylko sprawdzasz, czy linia zaczyna się od write:" i kończy na ";. Co z góry wyklucza użycie kilku wyrażeń w jednej linii. W sumie nie wiem, na ile to przeoczenie, a na ile świadomy design, bo nigdzie nie ma opisu tego języka.
komentarz 29 maja 2024 przez niezalogowany
własnie to testowałem i nie umiem testowac  ..to na 90% z mojej strony swiadome (nie mówie o błedach)
komentarz 29 maja 2024 przez niezalogowany
musze szybko poprawic  i dodatkowo zrobic system zgłosszen
komentarz 29 maja 2024 przez niezalogowany

@Comandeer, poprawione białe znaki działają a 

write:""heloo";write:"hello";

 

// zwraca wynik:

 

"heloo";write:"hello juz srednio bo zwraca jedno write ale nie ma błędów  na razie

komentarz 29 maja 2024 przez niezalogowany
jednak to ostatnie w ogole nie poprawione .. dziewne jak testowałem to było w połowie poprawione

Podobne pytania

+2 głosów
3 odpowiedzi 606 wizyt
pytanie zadane 3 sierpnia 2018 w Nasze projekty przez Śwież4k Bywalec (2,570 p.)
+15 głosów
10 odpowiedzi 2,027 wizyt

93,653 zapytań

142,574 odpowiedzi

323,089 komentarzy

63,169 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

Kursy INF.02 i INF.03
...