Diskuze: Machr na algoritmy - Vlastní programovací jazyk

Java Java Machr na algoritmy - Vlastní programovací jazyk

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Opět zdravím všechny programátory, minisoutěž na tento týden o placku bude obzvláště zajímavá. Naprogramujeme si totiž vlastní interpreter (vlastní programovací jazyk). Nebojte, není to tak složité, jak si myslíte, vlastně to jde udělat i poměrně jednoduše :)

Úkolem soutěže je vytvořit jednoduchý skriptovací jazyk, ve kterém půjde naprogramovat výpočet faktoriálu. Měl by tedy umět psát a číst z proměnných, zpracovat jednoduchou podmínku a umět přeskočit na jiné místo v programu pomocí GOTO. Tyto 3 věci by měly stačit k tomu, aby se dal program na faktoriál napsat.

Aplikace zpracuje vstupní zdrojový kód ve vašem jazyce, který si můžete navrhnout jak chcete. A ne, opravdu tam nemůže být napsáno faktorial(x) :P Zdrojový kód by mohl vypadat např. takto:

prom x = 5;
prom vysledek = 1
prom i = 2
sekce 1
pokud i <= x
  vysledek = vysledek * i;
  jdi 1
konecpokud
vypis vysledek

Výše uvedený jazyk jsem si vymyslel a kód v něm zapsaný by měl spočítat faktoriál z proměnné x. Váš program načte z textového souboru zdrojový kód podobný tomuto a bude ho interpretovat (vykonávat). Na konci by se měl vypsat výsledný faktoriál. Samozřejmě můžete místo GOTO použít např. příkaz opakuj pocet, kde pocet bude x - 1.

Jazyk nemusí umět pracovat se složitými matematickými výrazy, stačí ho naučit jen a * b, a > b a podobně. Nemusí umět 2+8*4a/52. Kdyby se někdo rozvášnil, může poslat kromě faktoriálu i nějaký pokročileší program ve svém jazyce, který např. používá funkce.

Určitě si to zkuste, takovéhle skripty se používají často ve hrách, sám jsem je používal u své adventury. Můžete použít libovolný programovací jazyk. Čas si dejme jako vždy do neděle 27.10. do 18:00 hodin.

Hodnotit budu co jazyk umí a také jak je to napsané. Jako vždy platí, raději naprogramujte méně a dejte si záležet, aby byl kód hezký a jednoduchý. Podrobnější pravidla soutěží naleznete zde: http://www.itnetwork.cz/…outezi-machr

Editováno 22.10.2013 10:39
Odpovědět  +4 22.10.2013 10:38
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Ondřej Hanák
Redaktor
Avatar
Odpovídá na David Čápka
Ondřej Hanák:

Zrovna v pondeli jsem premyslel proc jsem nedas machra na vlastni progr. jazyk :D

 
Nahoru Odpovědět  ±0 22.10.2013 16:13
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:

Vytvořit svůj jazyk byl vždycky můj sen. Už jsem na tom dokonce začal pracovat (objektově orientovaný jazyk překládaný do assembleru) :D . Rozhodně se zúčastním, pak to využiju při ladění ve svém editoru kódu.

Nahoru Odpovědět  +3 22.10.2013 16:27
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na David Čápka
Jakub Lásko[Saarix]:

Tak už jsem začal, ale vůbec to nevidím slibně :-) Je to docela zvláštní téma, ještě sem nedostal nějaký nápad jak to pěkně zaonačit. Snad to přijde.

Nahoru Odpovědět 22.10.2013 16:52
Časem je vše možné.
Avatar
Odpovídá na Zdeněk Pavlátka
Jakub Lásko[Saarix]:

Pokud se ale nepletu, tak bez zkoumání toho zda je řádku kódu daný znak nebo řetězec a na základě toho "něco" se neobejdu asi že?

Nahoru Odpovědět 22.10.2013 17:01
Časem je vše možné.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Jakub Lásko[Saarix]
Zdeněk Pavlátka:

Piš trochu srozumitelněji a nevynechávej slova.
Edit: Základem je dobrá práce s textem/řetězci

Editováno 22.10.2013 17:04
Nahoru Odpovědět 22.10.2013 17:03
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Jakub Lásko[Saarix]:

Jaj promiň nečetl jsem to už po sobě. Uf no zatím sem s texty moc nepracoval, tak uvidíme. Držím všem palce.

Nahoru Odpovědět 22.10.2013 17:08
Časem je vše možné.
Avatar
Posix
Člen
Avatar
Posix:

takové zajímavé témata by měly být přes prázdniny a ne během semestru :D

Nahoru Odpovědět  +2 22.10.2013 17:09
Proč to dělat jednoduše, když to jde složitě.
Avatar
Old Account
Člen
Avatar
Old Account:

Mne sa to osobne paci, myslim si ze je to krok jedine k lepsiemu, len tak dalej.
//Ospravedlnujem sa, mal som otvorenych viac okien v prehliadaci a splietol som si diskusiu.

Editováno 22.10.2013 17:42
Nahoru Odpovědět 22.10.2013 17:39
"If you keep your eye on the profit, you’re going to skimp on the product. But if you focus on making really gre...
Avatar
Ondrca
Redaktor
Avatar
Odpovídá na Ondřej Hanák
Ondrca:

Zrovna v pondeli jsem premyslel proc jsem nedas machra na vlastni progr. jazyk :D
jsem? Snad sem, ne?

Nahoru Odpovědět  -7 22.10.2013 18:41
Zase jsem o něco chytřejší
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Ondrca
Jan Vargovský:

Mám ti opravit tvou gramatiku ... ?

 
Nahoru Odpovědět  +3 22.10.2013 18:43
Avatar
Ondrca
Redaktor
Avatar
Ondrca:

Jestli něco najdeš tak můžeš :).

Nahoru Odpovědět  -3 22.10.2013 18:44
Zase jsem o něco chytřejší
Avatar
Radim Sückr
Redaktor
Avatar
Odpovídá na Ondrca
Radim Sückr:

Chybí ti čárka. (Rýpanec ze srandy, nejspíš vím, jak jsi to původně myslel. Chyba tam opravdu je, jen pro někoho není tak viditelná. :))

Editováno 22.10.2013 18:54
 
Nahoru Odpovědět  +2 22.10.2013 18:53
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:

Jsem docela zvědavý, kolik lidí tohle zkusí.

Nahoru Odpovědět 22.10.2013 19:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Ondřej Hanák
Redaktor
Avatar
Odpovídá na Ondrca
Ondřej Hanák:

Jsou toto snad nějaké testy z gramatiky ?
Jde o to, aby ostatní pochopili myšlenku, ne aby rýpali do něčeho, co není podstatné ;)

 
Nahoru Odpovědět  +1 22.10.2013 19:18
Avatar
Odpovídá na Zdeněk Pavlátka
Jakub Lásko[Saarix]:

No účast bude asi menší než na šibenici.

Nahoru Odpovědět  +2 22.10.2013 19:28
Časem je vše možné.
Avatar
Vojtěch Pospíchal:

Trochu jsem přemýšlel, jestli se zúčastnit. Na vlastním jazyce dělám chvíli, přesto si myslím, že už něco umí. Ale nikdy jsem nebyl fanda zveřejňování ZK, tak nevím, nevím no......

 
Nahoru Odpovědět  +1 22.10.2013 19:31
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Daniel Vítek:

Asi to udělám v PHP, ale na objekty zapomeň :D

 
Nahoru Odpovědět 22.10.2013 19:42
Avatar
Jenkings
Redaktor
Avatar
Jenkings:

Tak už pracuju na javascriptové verzi :D zatím to umí jen VYPIS a ERROR :D :D

Nahoru Odpovědět 22.10.2013 19:45
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Ondřej Hanák
Redaktor
Avatar
Odpovídá na David Čápka
Ondřej Hanák:

Ono to vypadá složitě, ale je to visoce lehké(a ještě to je na týden).

 
Nahoru Odpovědět  -4 22.10.2013 19:49
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Ondřej Hanák
Zdeněk Pavlátka:

Záleží na syntaxi vytvořeného jazyka.

Nahoru Odpovědět 22.10.2013 19:51
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Old Account
Člen
Avatar
Odpovídá na Ondřej Hanák
Old Account:

Urcite to je "visoce" lahke...

Nahoru Odpovědět  -2 22.10.2013 19:58
"If you keep your eye on the profit, you’re going to skimp on the product. But if you focus on making really gre...
Avatar
Ondřej Hanák
Redaktor
Avatar
Odpovídá na Old Account
Ondřej Hanák:

Hej tak fakt sorry..., *vysoce.
Vy jste na té gramatice totálně závislí.

 
Nahoru Odpovědět 22.10.2013 20:10
Avatar
Old Account
Člen
Avatar
Odpovídá na Ondřej Hanák
Old Account:

Ja osobne urcite nie, ale nemozem sa pozerat, ked niekto spravi takuto hrubku.

Nahoru Odpovědět  -1 22.10.2013 20:11
"If you keep your eye on the profit, you’re going to skimp on the product. But if you focus on making really gre...
Avatar
Jenkings
Redaktor
Avatar
Jenkings:

Tak zatím to vypadá nějak takhle

Nahoru Odpovědět  +3 22.10.2013 20:12
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na Jenkings
Jakub Lásko[Saarix]:

Já sem zatím asi tady :-) Teď už ale jdu dělat cykly a zpracování příkazů.

Nahoru Odpovědět 22.10.2013 21:11
Časem je vše možné.
Avatar
Odpovídá na David Čápka
Jakub Lásko[Saarix]:

Je zásadní, aby program uměl příkaz GOTO? :)

Nahoru Odpovědět 23.10.2013 16:57
Časem je vše možné.
Avatar
Posix
Člen
Avatar
Odpovídá na Jakub Lásko[Saarix]
Posix:

řekl bych, že je to celkem jedno.. btw příkaz goto je snad nejjednodušší příkaz :D

Nahoru Odpovědět 23.10.2013 17:01
Proč to dělat jednoduše, když to jde složitě.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
Kit:

Příkaz GOTO je docela složitý na implementaci u novějších jazyků. Pokud použiješ podmínky a cykly, tak ho vůbec nebudeš potřebovat.

Zřejmě se předpokládá, že navrhneme a implementujeme něco jako Basic, ale jazyk a implementace interpretru je na nás. Je jedno, jestli to uděláš ve stylu Lisp, Forth nebo Bash. Osobně mě láká ten Lisp, ale Forth je mnohem jednodušší a Basic je také na pár řádek. Že bych zkusil Waduzitdo?

Nahoru Odpovědět  +1 23.10.2013 17:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Kit
Jiří Gracík:

To poslední jsi se naučil v Bradavicích? Řek jsem to až napotřetí :D

Nahoru Odpovědět 23.10.2013 17:23
Creating websites is awesome till you see the result in another browser ...
Avatar
Odpovídá na Posix
Jakub Lásko[Saarix]:

taky si myslim, ale myslel jsem to spíš jako že si nemyslím že tam bude potřeba, když to zpracuje vstup a vyhodí výstup.

Nahoru Odpovědět 23.10.2013 17:25
Časem je vše možné.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jiří Gracík
Kit:

To je asi nejjednodušší interpretr, který znám. I s editorem se vejde do 256 B, pro požadovaný účel bych ho však musel trochu rozšířit.

Nahoru Odpovědět 23.10.2013 17:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Redaktor
Avatar
Theodor Johnson:

Zkusil jsem si to, a za cca hodinu mám tohle:

Nahoru Odpovědět  +1 23.10.2013 20:39
Přecházím na "Cross-Platform Development"
Avatar
Jenkings
Redaktor
Avatar
Jenkings:

Tak.. zadání mám splněné ;)
Na obrázku je jako příklad výpočet faktoriálu pro čtyřku a osmičku.
Teď se asi pokusím to trochu zpřehlednit a případně přidat nějaké další možnosti.

Nahoru Odpovědět 23.10.2013 21:18
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na Theodor Johnson
Jakub Lásko[Saarix]:

Nechápu jak si to dal tak rychle :-) sice mám asi podobný stav, ale dělal sem to trochu delší dobu...

Nahoru Odpovědět 24.10.2013 6:19
Časem je vše možné.
Avatar
Odpovídá na Theodor Johnson
Libor Šimo (libcosenior):

Máš to pekne a prehľadne urobené, len sa mi zdá, že ti to nepočíta správne.
Ak som dobre pochopil kód, tak je tento:

int main(void)
{
    int x = 10;
    int vysledok = 1;
    int a = 2;

    blok:
    if (vysledok <= 10)
    {
        vysledok += a;
        goto blok;
    }
    printf("%d", vysledok);
}

a tam je výsledok 11 a nie 16.

Nahoru Odpovědět 24.10.2013 7:59
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
Theodor Johnson:

ale ty tam máš výsledek + a, já tam mám výsledek * a

Nahoru Odpovědět 24.10.2013 8:07
Přecházím na "Cross-Platform Development"
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
Theodor Johnson:

stačí vědět jak na to ;-) btw. nedělám to poprvé

Nahoru Odpovědět 24.10.2013 8:16
Přecházím na "Cross-Platform Development"
Avatar
Odpovídá na Theodor Johnson
Jakub Lásko[Saarix]:

aha to bude tím :-) pro mě tohle bude první pokus o něco takového

Nahoru Odpovědět 24.10.2013 10:11
Časem je vše možné.
Avatar
Posix
Člen
Avatar
Posix:

Předpokládám, že na výrazy nemůžeme používat různ é eval funkce a podobně.. Nebo můžu hodit eval na celý porgram? :D

Nahoru Odpovědět 24.10.2013 10:58
Proč to dělat jednoduše, když to jde složitě.
Avatar
Odpovídá na Theodor Johnson
Libor Šimo (libcosenior):

Sorry, veď mi aj bolo divné, že to nepracuje správne.

Nahoru Odpovědět 24.10.2013 11:25
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jakub Lásko[Saarix]:

Hm tak boužel tuto soutěž vzdávám... :( Nemůžu nějak najít rešení co je praktické a proto jsem narazil u podmínky, takže snad příště. Přeju všem hodně štěstí.

Nahoru Odpovědět 24.10.2013 17:15
Časem je vše možné.
Avatar
Libor Šimo (libcosenior):

Priznávam porážku. :@

Editováno 24.10.2013 19:27
Nahoru Odpovědět 24.10.2013 19:26
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Doufám, že to stihnu dokončit včas. O víkendu budu pryč a dnes a zítra už nemám moc času. Snažím se to vytvořit tak, abych to mohl v budoucnu použít.

Nahoru Odpovědět 24.10.2013 20:14
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Jakub Lásko[Saarix]:

Zdálo se to lehké, ale až tak lehké to zase není. :(

Nahoru Odpovědět 25.10.2013 12:03
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Michael Olšavský:

Pokud se na to nejde opravdu nízkoúrovňově, tak to poměrně lehké je. Stačí se nad tím zamyslet. Zkoušel jsem to jen tak s jednodušším parserem a bylo to hnedka. Kdyžtak napiš. Klidně poradím.

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

Já sem to dělal asi složitější než to je potřeba, ale počkám si co vytvoří ostatní a zkusím si to dodělat. Mám to prakticky hotové, ale podmínka mě tam nejde a chtělo by to celkově zjednodušit.

Nahoru Odpovědět 25.10.2013 13:39
Časem je vše možné.
Avatar
Odpovídá na Michael Olšavský
Jakub Lásko[Saarix]:

Přece není všem soutěžím konec, tak nevadí když se jedna nepovede :-)

Nahoru Odpovědět 25.10.2013 13:40
Časem je vše možné.
Avatar
Posix
Člen
Avatar
Odpovídá na David Čápka
Posix:

Tady je můj výtvor. V tomto případě jsem se řídil heslem "Proč to dělat jednoduše, když to jde udělat složitě" :D Nicméně faktoriál to vypočítá, tak se v tom prozatím už nebudu hrabat :D http://leteckaposta.cz/815124883

Editováno 25.10.2013 16:39
Nahoru Odpovědět  -1 25.10.2013 16:38
Proč to dělat jednoduše, když to jde složitě.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Posix
Jan Vargovský:

Je tam vůbec něco, co není static ? :D

 
Nahoru Odpovědět  +1 25.10.2013 16:54
Avatar
Posix
Člen
Avatar
Odpovídá na Jan Vargovský
Posix:

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

Nahoru Odpovědět 25.10.2013 17:11
Proč to dělat jednoduše, když to jde složitě.
Avatar
Odpovídá na Posix
Jakub Lásko[Saarix]:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Posix
Zdeněk Pavlátka:

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
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

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 Posix
Michael Olšavský:

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
Posix
Člen
Avatar
Odpovídá na Michael Olšavský
Posix:

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
Proč to dělat jednoduše, když to jde složitě.
Avatar
Odpovídá na Posix
Libor Šimo (libcosenior):

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
Redaktor
Avatar
Theodor Johnson:

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
Přecházím na "Cross-Platform Development"
Avatar
Odpovídá na David Čápka
Michael Olšavský:

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
Redaktor
Avatar
Odpovídá na Michael Olšavský
Theodor Johnson:

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

Nahoru Odpovědět 25.10.2013 20:11
Přecházím na "Cross-Platform Development"
Avatar
Odpovídá na Theodor Johnson
Michael Olšavský:

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
Redaktor
Avatar
Odpovídá na Michael Olšavský
Theodor Johnson:

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  +1 25.10.2013 20:14
Přecházím na "Cross-Platform Development"
Avatar
Odpovídá na Theodor Johnson
Libor Šimo (libcosenior):

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
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
Theodor Johnson:

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

Nahoru Odpovědět 25.10.2013 20:22
Přecházím na "Cross-Platform Development"
Avatar
Libor Šimo (libcosenior):

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):

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
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
Theodor Johnson:

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
Přecházím na "Cross-Platform Development"
Avatar
Odpovídá na Michael Olšavský
Jakub Lásko[Saarix]:

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):

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

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

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]:

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:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Jakub Lásko[Saarix]
Zdeněk Pavlátka:

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
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

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]:

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):

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):

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:

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):

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:

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
Posix
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
Posix:

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

Nahoru Odpovědět 26.10.2013 13:47
Proč to dělat jednoduše, když to jde složitě.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na vitamin
David Čápka:

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

Nahoru Odpovědět 26.10.2013 14:02
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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 Čápka
vitamin:

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  +1 26.10.2013 14:32
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na vitamin
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Posix
Člen
Avatar
Odpovídá na vitamin
Posix:

regex je trosku pohodlnejsi

Nahoru Odpovědět 26.10.2013 14:44
Proč to dělat jednoduše, když to jde složitě.
Avatar
vitamin
Člen
Avatar
Odpovídá na David Čápka
vitamin:

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

 
Nahoru Odpovědět 26.10.2013 14:45
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Čá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
Jenkings
Redaktor
Avatar
Jenkings:

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
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Kit
Redaktor
Avatar
Odpovídá na vitamin
Kit:

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
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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  +2 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:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Posix
Zdeněk Pavlátka:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:

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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Nahoru Odpovědět 27.10.2013 18:28
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

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

Nahoru Odpovědět  +2 27.10.2013 18:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jenkings
Redaktor
Avatar
Jenkings:

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
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:

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.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Zdeněk Pavlátka
David Čápka:

Né že bych si jí nevšiml, ale nemám dost zkušeností s tím, jak jinak se to dá napsat. Nicméně minimálně bys z toho mohl volat další podprogramy :)

Editováno 27.10.2013 19:42
Nahoru Odpovědět 27.10.2013 19:42
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:

Chtěl jsem udělat funkce alespoň pro ten vstup a výstup, ale i takhle jsem to stihl tak tak.

Nahoru Odpovědět 27.10.2013 19:44
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Ondřej Hanák
Redaktor
Avatar
Ondřej Hanák:

Gratuliji :)

 
Nahoru Odpovědět 27.10.2013 20:06
Avatar
Theodor Johnson
Redaktor
Avatar
Theodor Johnson:

Gratuluji vítězům. btw. chtěl jsem to udělat jako recesi, že místo několika tříd to jde napsat na pár řádků, ale jaksi mi nedošlo že v mém případě používám kompiler namísto interpretu :-)

Nahoru Odpovědět 28.10.2013 1:01
Přecházím na "Cross-Platform Development"
Avatar
Posix
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
Posix:

nefunguje ti tam správně if :(

Nahoru Odpovědět 28.10.2013 2:05
Proč to dělat jednoduše, když to jde složitě.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Nahoru Odpovědět 28.10.2013 8:40
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Posix
Člen
Avatar
Posix:

treba

if A
  ...
   if B
     ...
   endif
   X
endif

kdyz neni pravda A, tak se stejne provede X

Editováno 28.10.2013 10:04
Nahoru Odpovědět 28.10.2013 10:04
Proč to dělat jednoduše, když to jde složitě.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Posix
Zdeněk Pavlátka:

Na vnořování nebyl čas. Pokud podmínka neplatí, přesune se běh programu na nejbližší end_if.

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

Preto sa kod najprv prevadza do stromu kde sa taketo veci riesia lahko.

 
Nahoru Odpovědět 28.10.2013 11:05
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

Stromům já vůbec nerozumím.

Nahoru Odpovědět 28.10.2013 11:21
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:

Z teorie něco málo umim. Jen to nedovedu přepsat do programu.

Nahoru Odpovědět 28.10.2013 12:00
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Posix
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
Posix:

No ono se to nepřevádní přímo do nějakého stromu. Taky proto se to jmenuje abstraktní strom

Nahoru Odpovědět 28.10.2013 13:34
Proč to dělat jednoduše, když to jde složitě.
Avatar
vitamin
Člen
Avatar
Odpovídá na Posix
vitamin:

Ako si to myslel? Kód sa prevádza z tokenov primo do stromovej štruktúry.

 
Nahoru Odpovědět 28.10.2013 14:29
Avatar
Kit
Redaktor
Avatar
Odpovídá na Posix
Kit:

Jmenuje se to derivační strom, který se skutečně vytváří.

Nahoru Odpovědět  +1 28.10.2013 15:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Kit:

Našel jsem interpretr jazyka Lisp napsaný v C++ na 90 řádcích:
http://howtowriteaprogram.blogspot.cz/…es-of-c.html

Nahoru Odpovědět  +1 16.11.2013 18:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 116 zpráv z 116.