Diskuze: Machr na algoritmy - Vlastní programovací jazyk
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 50 zpráv z 116.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Tak něco takového bych fakt nestvořil... funguje to pěkně.
Do teď jsem nepřišel na to, jak v tom ten kód spustit.
Mezikód už jsem spustil.
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í , zřejmě jsi na mě až moc
geniální, protože já se v tom ne a ne vyznat
Je to opravdu síla. Samá
statika, podmínky, metody. Za kód bych ti nedal ani bod, ale za ten zbytek
teda poklona.
Je to jednoduché 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ý.
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...
Tak snad může být ten SkyDrive, jinak tady to je http://sdrv.ms/16AzKgG
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 ...
no tak mě neukřižuj, že jsem na to šel jednoduše
Né v pohodě Je to
náhodou chytré.
Jen jestli
je to povolené.
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
Nemal by si upraviť zdrojový súbor.txt aby vypočítal faktoriál?
Já to mám podle vzoru, někde tam mám chybu?
Blok treba upraviť:
blok:
pokud (a <= 10) // pokud == if
{
vysledek *= a;
a++;
jdi blok; // jdi == goto
}
Díky, hned to přepíšu, nevěděl jsem to, faktoriál běžně nepočítám
Je pravda že v kódu od Posix je opravdu těžké se vyznat. Snad něco pochytím od
loapmaila.
Je to také jednoduché(zložité), až sa to sdracovi nebude páčiť.
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);
}
Tak s tímhle asi nepochodíš sdraco v úvodu psal že tam něco jako funkce či metoda factorial()
nemůže být.
Tu su zdrojaky (zabudol som ich pripjit ):
http://uloz.to/…/wtflang-zip
Je to napisane v jazyku D ( dmd 2.-63.2).
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í.
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.
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;
}
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;
}
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ě.
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++.
Teď mě napadlo, že bych mohl mít chybu v načítání ze souboru.
to je sranda.. chces delat interpret, ale zaseknes se uz na takove veci
Vypadá to super, ale doplň to prosím o spustitelnou verzi.
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?
Nemůžu si kvůli každému výtvoru stahovat jazyk, proto je podmínkou, aby se program odevzdal i v exe podobě.
Částečně máš pravdu, ale v čem chceš dnes vyvíjet systémové aplikace v OOP? O ničem jiném nevím.
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
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í.
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"
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.
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).
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.
Popis jazyka: https://dl.dropboxusercontent.com/…jazyk_CL.pdf
Oba odkazy už jsou aktivní.
Koukám, že jsem ten faktoriál výše napsal blbě, za to se omlouvám
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 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
Tak gratuluji vítězům
Jak tak koukám tak ostatní jsou o na úplně jiné úrovni než já
Nebyl čas 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
A samozřejmě gratuluji všem vítězům.
Zobrazeno 50 zpráv z 116.