Interpret programovacího jazyka Výplod
Přibližně za měsíc zveřejním kód svého interpretu programovacího jazyka Výplod. V čem je tento jazyk tak výjimečný, že si zaslouží svůj vlastní interpret? Vůbec ničím. Přesto, že se jedná o jeden z projektů, který se mi nepovedlo napasovat na nic praktického, strávil jsem nad ním tolik času, že si zaslouží být oslavován protivným smajlíkem. ![]()
Jednou z osobitých (tedy nad rámec zadání) vlastností jazyka je jeho typování. Několik let starý první dojem z typování v Perlu ve mě tak hluboko zakořenil, že jsem se pokusil některé z principů implementovat. A tak vznikl jazyk ve kterém se snoubí nevýhody statického i slabého typování. Předvedu na ukázce automatické konverze řetězce na číslo (a naopak).
// promene je nutne deklarovat a jeste pred pouzitim jim tak urcit datovy typ
int $p;
string $s,$o;
reads $s;
// pokud porovnavame retezec s cislem, dojde automaticke konverzi retezce
// na cislo o hodnote poctu znaku v retezci
if ($s > 10) {
echo 'Moc dlouhe slovo.';
}
// operator + aplikovany na retezce slouzi k jejich spojovani
$s = '* ' + $s + ' *';
// pri prirazeni opet dochazi ke konverzi na cislo udavajici pocet znaku
$p = $s;
while ( $p > 0) {
// tady zas konvertujeme cislo na retezec (pridavam k retezci)
$o = $o + $p;
$p = $p - 1;
}
echon $o;
echon $s;
echon $o;
Výsledkem tohoto programu je pak něco takového:
87654321 * ahoj * 87654321
Pokud někoho zaujal výraz ve kterém sčítám řetězec s číslem a položil si otázku jak má interpret poznat, který z operandů se má typově přizpůsobit tomu druhému, odpovědí je jedna ze záludností jazyka. Pokud je jeden z operandů řetězec, je vždy výraz převáděn na řetězec. Záleží tedy na pořadí v jakém dochází k vyhodnocování výrazu, viz vševysvětlující ukázka:
echon 'hello ' + 2 + 1; echon 2 + 1 + ' hello'; echon 'hello ' + (2 + 1);
Vypíše:
hello 21 3 hello hello 3
Zde je možná na místě zmínit, že výrazy vyhodnocuji tak, že je před vyhodnocením převedu do postfixové notace (zpracování je pak výrazně jedodušší).
Při návrhu jazyka jsem neměl žádnou vizi. Místo jazyků originálních typu Brainfuck, tak vznikl cestou nejmenšího odporu hybrid Cčka a PHPčka. Jaký jazyk byste navrhli vy?



