Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Sice jsem to sem ještě původně dávat nechtěl, ale neodolal jsem :D .

Pracuji na svém vlastním jazyku EBL - Event Based Language. Už se tu o tom párkrát mluvilo, má to být moderní objektový jazyk určený pro vývoj her. Tvořím si k němu kromě překladače i IDE (obrázky) se zvýrazněním syntaxe apod.

Zatím jdou překládat jen určité příkazy a nekontrolují se chyby v kódu, ale na tom už pracuju. :) Kód jde zatím překládat do JavaScriptu.

Lehký pohled do syntaxe:

základní typy proměnných:
    sint (int), uint (unsigned int), byte, long, real (float)
    bool, text (string), char
komentáře:
    ~něco, i na více řádků~
    ~/něco jiného
unární operátory:
    ++, --, ** (2. mocnina), // (druhá odmocnina)
události (dají se přirovnat k funkcím bez parametrů a návratové hodnoty):
    <název> ~kód~
    - vestavěné události jsou start, step a end
    - časem přidám volání vlastních událostí

Co si o projektu myslíte?
Na jakékoli dotazy (ohledně IDE, jazyka atd.) se pokusím odpovědět ;)

Editováno 10.2.2014 18:52
Odpovědět  +2 10.2.2014 18:51
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
Inoue Yūki:

Vypadá to dobře. Dalo by se to používat v praxy?

Nahoru Odpovědět 10.2.2014 18:57
Avatar
Odpovídá na Zdeněk Pavlátka
Michal Žůrek (misaz):

Bych čekal že Event Based Language nebude zakládat ani tak na objektech jako na událostech. Ale i tak je to zajímavé. Fandím ti v optimalizacích, na hry to musí být pořádně rychlé.

Nahoru Odpovědět 10.2.2014 18:59
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Jan Vargovský:

Vzhledem k tomu, že je to jazyk v jazyku tak nevím :)

 
Nahoru Odpovědět 10.2.2014 19:01
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
Zdeněk Pavlátka:

Události jsou základ práce s ním. Bez nich ti budou objekty k ničemu. start, step a end jsou pro konzolové a webové aplikace, pro hry přibudou draw, mouse, keyboard a možná něco k tomu.

Nahoru Odpovědět  +1 10.2.2014 19:02
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Nahoru Odpovědět 10.2.2014 19:03
Nesnáším {}, proto se jim vyhýbám.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
Zdeněk Pavlátka:

Nevím jak to myslíš 8|
Jan Vargovský : časem hodlám přidat překlad do ASM.

Nahoru Odpovědět 10.2.2014 19:04
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Akym sposobom vytvaras a reagujes na eventy? Mas tam funkcie, triedy, struktury? Aky mas type system? Ako mas implementovany prekladac?

 
Nahoru Odpovědět 10.2.2014 19:06
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
Inoue Yūki:

Mno jestli je to jenom "na odzkoušení znalostí" nebo to s tím jazykem myslíš vážně a chceš aby ho lidi používali.

Nahoru Odpovědět 10.2.2014 19:06
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
Zdeněk Pavlátka:

Myslím to s ním vážně. Mít svůj jazyk je můj sen co umím programovat. :) Syntax tvořím tak, aby se kód co nejpříjemněji psal a zároveň toho jazyk uměl co nejvíc. Ale je to perfektní cvičení z práce s textem :D

Nahoru Odpovědět 10.2.2014 19:10
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

eventy: vnitřně jsou to funkce s určitými pravidly
třídy a funkce: přibudou časem, teď dělám na kontrole syntaxe

~Ukázka super jednoduché třídy:~
class File{
#variables
        text url;
#methods
        init(_url)~/konstruktor
        {
                url = _url;
        }
        text getUrl()~/metoda
        {
                return url;
        }
}

type system: zatím chybí (u překladu do js to nemá smysl), časem ho propracuju
překladač: složitě :D Projede se kód a rozloží se na tokeny. Ty se pak složí do příkazů. Překladač pak bere jednotlivé příkazy a překládá je ;)

  • jestli chceš vidět zdroják(v C#), klidně ukážu, ale předem upozorňuju, že je fakt hnusnej
Nahoru Odpovědět 10.2.2014 19:17
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Ukaz zdrojaky, ked tak ti mozem aj poradit mam rozpisany kompilator na vlastny jazyk a uz riesim semanticku analyzu :)

 
Nahoru Odpovědět 10.2.2014 19:20
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Nahoru Odpovědět 10.2.2014 19:26
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
Zdeněk Pavlátka:

Já vás varoval :D
Metoda StrToParts je z nich nejhezčí (nejmíň předělávaná).

Nahoru Odpovědět 10.2.2014 19:30
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Faktoriál čísla 10 s událostmi:

sint s;
sint i;
<start>
    s = 1;
    i = 1;
<step>
    if(i > 10)
    {
        &end 0;
    }
    s *= i;
    i++;
<end>
    std_out("10! = @s@");

výstup compileru: https://dl.dropboxusercontent.com/…t/index.html

Editováno 10.2.2014 20:08
Nahoru Odpovědět 10.2.2014 20:05
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Dam ti radu, najprv sa zameraj na lexikalnu analyzu (rozdelenie vstupneho textu na Tokeny, u teba je to funkcia StrToParts). Kazdy token by mal byt reprezentovany minimalne dvomi castami, ciselnym kodom a jeho hodnotou. Problem z textovymi retazcami je ten ze ich porovnavanie je pomale a zlozite, zato ciselne hodnoty sa porovnvaju lahko. Priklad:

class File{
#variables
       text url;
#methods
       init(_url)
       {
               url = _url;
       }
       text getUrl()
       {
               return url;
       }
}

Transformujes na:

[ Key(int)         :  Value(String) ]
-------------------------------------------
[ KW_CLASS         :  null          ]
[ IDENTIFIER       : "File"         ]
[ OPERATOR_BLOCK_L :  null          ]
[ OPERATOR_SHARP   :  null          ]
[ WORD             : "variables"    ]
[ WORD             : "text"         ]
[ WORD             : "url"          ]
[ OPERATOR_SCOLON  :  null          ]
...
[ OPERATOR_BLOCK_R :  null          ]
[ END_OF_FILE      :  null          ]

Stlpec Key bude reprezentovat ciselny kluc (Lexem), na to si staci spravyt enum. Kazdy operator a kazde klucove slovo tvojho jazyka by malo mat vlastny ciselny kod, takze neskor ti bude stacit porovnavat ciselne kody a netreba porovnavat stringy. Niektore Kluce ako IDENTIFIER mozu obsahovat dodatocnu hodnotu Value. Hodnota identifikatora ta vecsinou zaujima az pri semantickej analyze (samozrejme ak nerobis kompilator pre sialeny jazyk ako c/c++ :) ).
Podobny princip sa pouziva skoro vo vsetkych kompilatoroch co som videl. Na lexikalnu analyzu sa vecsinou pouziva stavovy automat, najprimitivnejsia forma je vecsinou cyklus ktory prechadza znak po znaku cely subor, v cykle je jeden giganticky switch a samotne znaky su stavy automatu.
Je dobre si ukladat do Tokenov aj dalsie informacie ako riadok na ktorom sa token nachadza, zide sa to neskor pri chybovych hlaskach. Ver my ze chybove hlasky ktore obsahuju aspon riadok kde nastala chyba ti usetria mnozstvo nervov pri hladani chyb.

Priklady lexerov:
Jazyk NullC: http://code.google.com/…LC/Lexer.cpp
Jazyk D: https://github.com/…/src/lexer.c

Po lexikalnej analyze prichadza trochu tazsia cast, syntakticka analyza. V tejto casti z tokenov vytvaras abstraktny syntakticky strom(AST), niekedy sa vola aj derivacny strom. Po syntaktickej analyze nasleduje semanticka.
Ak si si jazyk dobre navrhol tak sadaju tieto casti od seba uplne oddelit.
Co sa tyka syntaktickej analyzy, doporucujem pozret si co to je Recursive descent parser, jeho implementacia je velmi jednoducha, dobre sa vypisuju chybove hlasky a hlavne netreba ovladat skoro ziadnu teoriu.

 
Nahoru Odpovědět 10.2.2014 20:09
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

Časem to tak zpracuju, dneska už nemám čas ;) Ale díky za rady.

Nahoru Odpovědět 10.2.2014 20:12
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Po dlouhé době přidávám základní popis syntaxe mého jazyka. Časem přibudou třídy, struktury, výjimky apod.
https://dl.dropboxusercontent.com/…L_syntax.pdf

Nahoru Odpovědět  +2 14.2.2014 17:18
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Kdokoliv může samozřejmě psát rady a připomínky ;)

Nahoru Odpovědět 14.2.2014 17:49
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 20 zpráv z 20.