Diskuze: EBL IDE (editor + překladač pro můj programovací jazyk)
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 20 zpráv z 20.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Vypadá to dobře. Dalo by se to používat v praxy?
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é.
Vzhledem k tomu, že je to jazyk v jazyku tak nevím
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.
Nevím jak to myslíš
Jan Vargovský : časem hodlám přidat překlad do ASM.
Akym sposobom vytvaras a reagujes na eventy? Mas tam funkcie, triedy, struktury? Aky mas type system? Ako mas implementovany prekladac?
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.
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
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ě
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
Ukaz zdrojaky, ked tak ti mozem aj poradit mam rozpisany kompilator na
vlastny jazyk a uz riesim semanticku analyzu
Tady je zdroják na zpracování kódu.
http://www.itnetwork.cz/dev-lighter/302
Já vás varoval
Metoda StrToParts je z nich nejhezčí (nejmíň předělávaná).
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
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.
Časem to tak zpracuju, dneska už nemám čas Ale díky za rady.
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
Kdokoliv může samozřejmě psát rady a připomínky
Zobrazeno 20 zpráv z 20.