NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Machr na algoritmy - Vlastní programovací jazyk

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Odpovídá na Jan Vargovský
Neaktivní uživatel:25.10.2013 17:11

viz. "Proč to dělat jednoduše, když to jde udělat složitě" :D

Odpovědět
25.10.2013 17:11
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Jakub Lásko[Saarix]:25.10.2013 17:39

Tak něco takového bych fakt nestvořil... funguje to pěkně.

Nahoru Odpovědět
25.10.2013 17:39
Časem je vše možné.
Avatar
Odpovídá na Neaktivní uživatel
Zdeněk Pavlátka:25.10.2013 18:07

Do teď jsem nepřišel na to, jak v tom ten kód spustit.

Nahoru Odpovědět
25.10.2013 18:07
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka:25.10.2013 18:09

Mezikód už jsem spustil.

Nahoru Odpovědět
25.10.2013 18:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Neaktivní uživatel
Michael Olšavský:25.10.2013 19:17

Musím uznat, že to funguje fakt skvěle, ale podle mě to má naprosto neefektivní kód. Nechápu tvůj způsob myšlení :-D, zřejmě jsi na mě až moc geniální, protože já se v tom ne a ne vyznat :-D Je to opravdu síla. Samá statika, podmínky, metody. Za kód bych ti nedal ani bod, ale za ten zbytek teda poklona. :-)

 
Nahoru Odpovědět
25.10.2013 19:17
Avatar
Odpovídá na Michael Olšavský
Neaktivní uživatel:25.10.2013 19:26

Je to jednoduché :D Máš tam 3 statické třídy, které to celé řídí:
Scanner: akorát čte jednotlivé tokeny ze zdrojového programu.
Parser: kontroluje syntaxi a když to jde, tak i sémantiku
Interpret: Provádí instrukce, které získal od parseru, zbytek sémantické analýzy.
Ale uznávám, že je ten kód docela přehnaný.

Nahoru Odpovědět
25.10.2013 19:26
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Libor Šimo (libcosenior):25.10.2013 19:39

Dúfal som, že sa z tvojho kódu niečo naučím, ale nemám šancu to ani pochopiť.
Možno budem múdrejší o pár rokov...

Nahoru Odpovědět
25.10.2013 19:39
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:25.10.2013 20:05

Tak snad může být ten SkyDrive, jinak tady to je http://sdrv.ms/16AzKgG :)

 
Nahoru Odpovědět
25.10.2013 20:05
Avatar
Odpovídá na David Hartinger
Michael Olšavský:25.10.2013 20:10

Je to co udělal Theodor Johnson povolené(udělal pouze parser a pak použil vestavěnou třídu)? Protože pokud ano, tak to naprosto znehodnotí smysl soutěže ...

 
Nahoru Odpovědět
25.10.2013 20:10
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Michael Olšavský
Theodor Johnson:25.10.2013 20:11

no tak mě neukřižuj, že jsem na to šel jednoduše :)

 
Nahoru Odpovědět
25.10.2013 20:11
Avatar
Odpovídá na Theodor Johnson
Michael Olšavský:25.10.2013 20:12

Né v pohodě :-) Je to náhodou chytré. ;-) Jen jestli je to povolené.

 
Nahoru Odpovědět
25.10.2013 20:12
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Michael Olšavský
Theodor Johnson:25.10.2013 20:14

Jak jsem to tak četl tak zakázaný ne, využít vestavěný kompiler bylo první co mě napadlo když jsem se nedočetl jeho zákazu :)

 
Nahoru Odpovědět
25.10.2013 20:14
Avatar
Odpovídá na Theodor Johnson
Libor Šimo (libcosenior):25.10.2013 20:19

Nemal by si upraviť zdrojový súbor.txt aby vypočítal faktoriál?

Nahoru Odpovědět
25.10.2013 20:19
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Theodor Johnson:25.10.2013 20:22

Já to mám podle vzoru, někde tam mám chybu?

 
Nahoru Odpovědět
25.10.2013 20:22
Avatar
Libor Šimo (libcosenior):25.10.2013 20:25

Blok treba upraviť:

blok:

pokud (a <= 10)      // pokud == if
{
vysledek *= a;
a++;
jdi blok;                   // jdi == goto
}
Nahoru Odpovědět
25.10.2013 20:25
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):25.10.2013 20:29

takto to má spočítať:

Nahoru Odpovědět
25.10.2013 20:29
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Theodor Johnson:25.10.2013 20:29

Díky, hned to přepíšu, nevěděl jsem to, faktoriál běžně nepočítám

 
Nahoru Odpovědět
25.10.2013 20:29
Avatar
Odpovídá na Michael Olšavský
Jakub Lásko[Saarix]:25.10.2013 20:33

Je pravda že v kódu od Posix je opravdu těžké se vyznat. :-) Snad něco pochytím od loapmaila.

Nahoru Odpovědět
25.10.2013 20:33
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Libor Šimo (libcosenior):25.10.2013 22:20

Je to také jednoduché(zlo­žité), až sa to sdracovi nebude páčiť. :`

Nahoru Odpovědět
25.10.2013 22:20
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
vitamin
Člen
Avatar
vitamin:26.10.2013 2:03

Mam to viac menej hotove, takto vyzera moj jazyk:
Syntax je podobna javascriptu:
(script musy byt v utf-8 alebo ascii)

/*
 * Vypocet faktorialu pomocou cyklu
 */
function factorialA(var x){
        var temp = 1;

        if(true);
        while(x > 1){
                temp *= x;
                --x;
        }
        return temp;
}

/*
 * Vypocet faktorialu pomocou rekruzie
 */
function factorialB(x) {
        if(x <= 1) return 1;

        var temp;

        temp = (x * factorialB(x - 1));
        return temp;
}

//Start
function main(){
        var x = readInt();

        //Vypocet faktorialov:
        print("factorialA(", x, ") = ", factorialA(x));
        print("factorialB(", x, ") = ", factorialB(x));

        /*
         * Práca s poľom:
         */
        var array = [];
        var i = 7;
        while(--i)array ~= factorialA(i);

        print('array: ', array);

        /*
         * Práca so štruktúrov:
         */
         var struct = {
                arr: array,
                length: array.length,
                text: "string",
                lambda: function(x, y){return x + y;},
                real: 3.14,
                int: 23

         };

         print("struktura: ", struct);

         struct.lambda = "'string'";
         struct.arr = null;

         print("\n\n [struktura po jednotlivych prvkoch: ]");
         print("arr: ", struct.arr);
         print("length: ", struct.length);
         print("text: ", struct.text);
         print("lambda: ", struct.lambda);
         print("real: ", struct.real);
         print("int: ", struct.int);

}
 
Nahoru Odpovědět
26.10.2013 2:03
Avatar
Odpovídá na vitamin
Jakub Lásko[Saarix]:26.10.2013 7:20

Tak s tímhle asi nepochodíš :-) sdraco v úvodu psal že tam něco jako funkce či metoda factorial() nemůže být.

Nahoru Odpovědět
26.10.2013 7:20
Časem je vše možné.
Avatar
vitamin
Člen
Avatar
Odpovídá na Jakub Lásko[Saarix]
vitamin:26.10.2013 7:58

Tu su zdrojaky (zabudol som ich pripjit :) ):
http://uloz.to/…/wtflang-zip
Je to napisane v jazyku D ( dmd 2.-63.2).

 
Nahoru Odpovědět
26.10.2013 7:58
Avatar
Odpovídá na Jakub Lásko[Saarix]
Zdeněk Pavlátka:26.10.2013 9:00

Pokud jí v tom jazyce nadefinuje, neměla by vadit. Dokonce by to měla být výhoda, pokud umí jazyk i tvorbu funkcí.

Nahoru Odpovědět
26.10.2013 9:00
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka:26.10.2013 9:24

Nakonec se nezúčastním. Nefunguje mi funkce strtok (vrací prázdné řetězce), na které jsem to měl založené a nic nového už nestihnu.

Nahoru Odpovědět
26.10.2013 9:24
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na vitamin
Jakub Lásko[Saarix]:26.10.2013 9:40

Ale jinak to vypadá pěkně :-)

Nahoru Odpovědět
26.10.2013 9:40
Časem je vše možné.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.10.2013 9:44

Tiež som to skúšal v céčku. Funkcia strtok() funguje správne, ale ako vstup potrebuješ reťazec.

#include <stdio.h>
#include <string.h>

int main ()
{
     char str[] ="- This, a sample string.";
     char * pch;
     printf ("Splitting string \"%s\" into tokens:\n",str);
     pch = strtok (str," ,.-");
     while (pch != NULL)
     {
        printf ("%s\n",pch);
        pch = strtok (NULL, " ,.-");
     }
     return 0;
}
Nahoru Odpovědět
26.10.2013 9:44
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.10.2013 11:15

Takto sa jednotlivé reťazce vracajú:

#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *fr;
    int c, i, j;
    char str[200];
    char * pch;
    char * pole[50];

    /* blok nacitania suboru */
    if ((fr = fopen("objekt.txt", "r")) == NULL) {
        printf("Subor sa nepodarilo otvorit.\n");
        return;         /* ukoncenie programu */
    }
    i = 0;
    while ((c = getc(fr)) != EOF) {
        str[i] = c;
        i++;
    }
    str[i] = '\0'; // povinne ukoncenie retazca
    fclose(fr);
    /* koniec bloku nacitania suboru */

    /* blok rozdelenia na jednotlive retazce */
    pch = strtok (str," ");
    i = 0;
    while (pch != NULL) {
        pole[i] = pch;
        pch = strtok (NULL, " ");
        i++;
    }
    /* koniec bloku rozdelenia na jednotlive retazce */

     for (j = 0; j < i; j++)
        printf("%s\n", pole[j]);
    return 0;
}
Nahoru Odpovědět
26.10.2013 11:15
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:26.10.2013 12:56

Já to psal v C++. Při prvním volání mi funkce strtok vrátila první "slovo", ale při dalších voláních vrací prázdné řetězce. Parametry mám určitě správně.

Nahoru Odpovědět
26.10.2013 12:56
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.10.2013 13:01

Vyskúšaj si ten kód vyššie, uvidíš, že pracuje správne a môžeš ho použiť aj v c++, poprípade si ho uprav do c++.

Nahoru Odpovědět
26.10.2013 13:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:26.10.2013 13:08

Teď mě napadlo, že bych mohl mít chybu v načítání ze souboru.

Nahoru Odpovědět
26.10.2013 13:08
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Neaktivní uživatel:26.10.2013 13:47

to je sranda.. chces delat interpret, ale zaseknes se uz na takove veci :D :D

Nahoru Odpovědět
26.10.2013 13:47
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na vitamin
David Hartinger:26.10.2013 14:02

Vypadá to super, ale doplň to prosím o spustitelnou verzi.

Nahoru Odpovědět
26.10.2013 14:02
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:26.10.2013 14:21

To by mě zajímalo, co bys dělal s ELF binárkou...

Nahoru Odpovědět
26.10.2013 14:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vitamin
Člen
Avatar
Odpovídá na David Hartinger
vitamin:26.10.2013 14:32

Kompilator na D je tu: http://dlang.org/download.html
Ak mas Visual Studio tak je tam aj plugin ktory integruje podporu D pre VS.
Ak chcete kompilovat cez prikazovy riadok tak staci dat do parametrov dmd zoznam vsetkych suborov, samotny kompilator to rovno aj zlinkuje a vyslednu binarku staci spustit.

Ten moj program ma mensi bug (ako main funkcia sa pouzie posledna funkcia v globalnom namespace, opravenu verziu poslem neskor).

Pre ostatnych:
Preco vobec pouzivate funkcie ako strtok, pripadne regexy? Nie je jednoduhsie si spravyt stavovy automat ktory bude generovat tokeny?

 
Nahoru Odpovědět
26.10.2013 14:32
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na vitamin
David Hartinger:26.10.2013 14:36

Nemůžu si kvůli každému výtvoru stahovat jazyk, proto je podmínkou, aby se program odevzdal i v exe podobě.

Nahoru Odpovědět
26.10.2013 14:36
New kid back on the block with a R.I.P
Avatar
Odpovídá na vitamin
Neaktivní uživatel:26.10.2013 14:44

regex je trosku pohodlnejsi

Nahoru Odpovědět
26.10.2013 14:44
Neaktivní uživatelský účet
Avatar
vitamin
Člen
Avatar
Odpovídá na David Hartinger
vitamin:26.10.2013 14:45

Oprášim virtualku winu a dam ti sem .exe :)

 
Nahoru Odpovědět
26.10.2013 14:45
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:26.10.2013 14:53

Částečně máš pravdu, ale v čem chceš dnes vyvíjet systémové aplikace v OOP? O ničem jiném nevím.

Nahoru Odpovědět
26.10.2013 14:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Neaktivní uživatel:26.10.2013 15:00

Download https://www.dropbox.com/…jenkings.zip
Ukázka : http://jenkings.eu/…/prog-jazyk/
Vzorový kód : http://jenkings.eu/…zyk/vzor.txt

Nejspíš tu zítra nebudu, takže to sem dám hned. Možná že to ještě do zítra trochu vylepším když budu stíhat

Nahoru Odpovědět
26.10.2013 15:00
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na vitamin
Kit:26.10.2013 15:01

Pošli mu ELF, však on si jistě poradí :)

Nahoru Odpovědět
26.10.2013 15:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:26.10.2013 15:12

Filozofickou otázkou je, co si představuješ pod pojmem "spustitelná podoba". Z určitého pohledu je to nejen ELF, ale i program napsaný v PHP či Pythonu. Z jiného úhlu pohledu to není ani EXE, protože ten přímo spustitelný není. Všechny jsou závislé na konfiguraci operačního systému a jeho virtuálních prostředí.

Nahoru Odpovědět
26.10.2013 15:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vitamin
Člen
Avatar
vitamin:26.10.2013 15:30

http://leteckaposta.cz/205542297

Obsahuje opravene chyby a binarku pre linux aj windows.
Cesta k scriptu sa da predat programu cez parameter, ak nie je zadana cesta tak sa otvori subor "script.txt"

 
Nahoru Odpovědět
26.10.2013 15:30
Avatar
Odpovídá na Neaktivní uživatel
Zdeněk Pavlátka:26.10.2013 15:34

Chyba se hledá dost špatně, když se ti při ladění ukazuje, že nefunguje úplně jiná část. A teoreticky by můj kód měl fungovat.

Nahoru Odpovědět
26.10.2013 15:34
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:27.10.2013 9:28

Už jsem našel chybu, při volání funkce strtok jsem nezadal jako oddělovač konec řádku a ona pak vracela prázdné řetězce na konci každého řádku (soubor jsem načítal po řádkách).

Nahoru Odpovědět
27.10.2013 9:28
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na David Hartinger
Zdeněk Pavlátka:27.10.2013 17:52

Tak jsem to stihl. Odkaz by se měl za nějakou chvíli zaktivnit. Dropbox mi píše 25 minut. Za chvíli přidám i PDF s popisem svého jazyka.

https://dl.dropboxusercontent.com/…ni_jazyk.zip

Nahoru Odpovědět
27.10.2013 17:52
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Nahoru Odpovědět
27.10.2013 18:28
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:27.10.2013 18:36

Koukám, že jsem ten faktoriál výše napsal blbě, za to se omlouvám :)

Nahoru Odpovědět
27.10.2013 18:36
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:27.10.2013 19:32

Výtvory jsou opravdu skvělé. Každý si zde určitě něco najde a budu moc rád, když je publikujete. Něco je opravdu jednoduché, něco je naopak velmi blízko reálným programovacím jazykům. Rozhodl jsem se opět udělit více placek.

Posix (100 bodů) - Tohle je zajímavé, komentáře, větev else, cykly, ten manuál se fakt povedl, skoro bych si ho zarámoval :P Koukám, že vyrábíš binární mezikód, skvělé. Zdroják je teda fakt hustý, asi by chvíli trvalo, než bych to celé pochopil. Hlavní je, že používáš tokenizer a serializuješ do binárky. Je tam nějak moc statiky, ale to asi tak nevadí. Jsem zvědavý, jestli tohle někdo překoná.
Silvinious (100 bodů) - Ví se o mně, že jsem objektový člověk a tenhle zdroják se mi opravdu líbí. Vypadá to jako návrhový vzor interpreter, každopádně v tomhle se člověk vyzná, třídy jsou jednoduché, sice jich je více, ale to řeší jmenné prostory.
vitamin (100 bodů) - Další zajímavý kousek, datové typy a definice funkcí, dokonce struktury a lambda. Jazyk D jsem ještě neviděl, ale naštěstí je poměrně čitelný. Obávám se, že jsi zde opravdu vytvořil plnohodnotný jazyk, ani jsem nečekal, že tohle někdo udělá :)
loapmail (80 bodů) - Šel jsi na to zajímavě, aneb proč to dělat složitě, když to jde jednoduše. Projekt ale asi nesplňuje zadání, jelikož nejde o interpreter, ale překladač. Nicméně dobrý, používáš tam zajímavé věci.
nuz (80 bodů) - Jazyk obsahuje některé zajímavé funkce a přípravu pro datové typy. Co se mi příliš nezdá jsou ty goto skoky uvnitř hlavní smyčky, možná by to chtělo trochu refaktorovat, aby bylo možné syntaxi jazyka dále rozšiřovat.
jenkings (75 bodů) - Krásně jednoduché, o výkonu se nedá moc hovořit, ale je to krátké a funguje to dobře. Podobně bych to asi dělal, jen objektově.

Gratuluji vítězům, své výtvory publikujte a adresu pošlete do zpráv x. Všem děkuji za účast, jsem hrozně rád, že se v soutěžích objevují i věci, které převyšují mé dosavadní znalosti :)

Nahoru Odpovědět
27.10.2013 19:32
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:27.10.2013 19:39

Tak gratuluji vítězům ;)

Jak tak koukám tak ostatní jsou o na úplně jiné úrovni než já ;)

Nahoru Odpovědět
27.10.2013 19:39
Neaktivní uživatelský účet
Avatar
Odpovídá na David Hartinger
Zdeněk Pavlátka:27.10.2013 19:39

Nebyl čas :D Měl jsem v plánu něco mnohem lepšího (základ svého plánovaného jazyka) ale čtení ze souboru jsem zprovoznil včera odpoledne. Musel jsem čtení přepsat z C++ do C. A čekal jsem, že mi zkritizuješ tu dlouhou funkci interpret :D
A samozřejmě gratuluji všem vítězům. 8-)

Editováno 27.10.2013 19:42
Nahoru Odpovědět
27.10.2013 19:39
Kolik jazyků umíš, tolikrát jsi programátor.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 50 zpráv z 116.