Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
Zdeněk Pavlátka:10.2.2014 18:51

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
10.2.2014 18:51
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Neaktivní uživatel:10.2.2014 18:57

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

Nahoru Odpovědět
10.2.2014 18:57
Neaktivní uživatelský účet
Avatar
Odpovídá na Zdeněk Pavlátka
Michal Žůrek - misaz:10.2.2014 18:59

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
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Vargovský:10.2.2014 19:01

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

 
Nahoru Odpovědět
10.2.2014 19:01
Avatar
Odpovídá na Michal Žůrek - misaz
Zdeněk Pavlátka:10.2.2014 19:02

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
10.2.2014 19:02
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek - misaz:10.2.2014 19:03

a právě proto mu fandím.

 
Nahoru Odpovědět
10.2.2014 19:03
Avatar
Odpovídá na Neaktivní uživatel
Zdeněk Pavlátka:10.2.2014 19:04

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:10.2.2014 19:06

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
Odpovídá na Zdeněk Pavlátka
Neaktivní uživatel:10.2.2014 19:06

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Zdeněk Pavlátka:10.2.2014 19:10

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
Odpovídá na vitamin
Zdeněk Pavlátka:10.2.2014 19:17

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:10.2.2014 19:20

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
Odpovídá na vitamin
Zdeněk Pavlátka:10.2.2014 19:26

Tady je zdroják na zpracování kódu.
http://www.itnetwork.cz/dev-lighter/302

Nahoru Odpovědět
10.2.2014 19:26
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Nahoru Odpovědět
10.2.2014 19:27
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Zdeněk Pavlátka:10.2.2014 19:30

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:10.2.2014 20:05

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:10.2.2014 20:09

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
Odpovídá na vitamin
Zdeněk Pavlátka:10.2.2014 20:12

Č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:14.2.2014 17:18

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
14.2.2014 17:18
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka:14.2.2014 17:49

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.