Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Jak fungují dnešní jazyky?

Volná diskuze Jak fungují dnešní jazyky?

Aktivity (1)
Avatar
matesax
Redaktor
Avatar
matesax:30.12.2012 22:42

Dobrý den,
snažím se pochopit, jak fungují vyšší jazyky. Tedy teorie je jasná a snadná. Je jedno, co bude tam "nahoře" - prostě si vytvořím klíčová slova a pravidla. Jenže jak ta pravidla aplikovat? Jak generovat strojový kód - nemohu přeci přiřadit tomu a tomu uskupení ten a ten příkaz/y ve strojovém kódu - nebo ano? Pokud ano, tak mne zaráží, jak může mít jazyk vlastní kompilátor - nezaložený na existujícím jazyku... Tedy v čem vůbec bude parser - ten přeci musí být v existujícím jazyku - a jeho parser vznikl jak? :) Byl bych moc rád, kdyby mi to někdo odhalil... :) Docela si to dovedu představit - jen nevím, jak bych napsal ta pravidla - a v čem psát parser - jinak to už je celkem dominový efekt... Děkuji.

Editováno 30.12.2012 22:44
 
Odpovědět 30.12.2012 22:42
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:30.12.2012 23:03

Úplně první programy byly ve strojovém kódu. Bylo to zdlouhavé a pracné. Proto v tomto strojovém kódu vývojáři napsali první Assembler, který ze symbolického zápisu udělal potřebný strojový kód. V Assembleru pak napsali kousek vyššího jazyka, např. Fortranu. V něm dopsali další kus Fortranu. Podobně to bylo i s C. No a v C byly už napsány další jazyky.

Pro psaní parserů se často používá nějaká nadstavba C, např. Flex nebo Bison, ale můžeš si ho napsat klidně v C#. Není to obtížné a troufám si tvrdit, že jsi to už někdy dělal. Jenom sis to neuvědomil. Vlastně už ve chvíli, kdy použiješ switch na vstupní data a podle nich se rozhoduješ, jak budeš dál pokračovat.

Nahoru Odpovědět 30.12.2012 23:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Luboš Běhounek (Satik):30.12.2012 23:16

"Dobrý den,
snažím se pochopit, jak fungují vyšší jazyky. Tedy teorie je jasná a snadná. Je jedno, co bude tam "nahoře" - prostě si vytvořím klíčová slova a pravidla. Jenže jak ta pravidla aplikovat? Jak generovat strojový kód - nemohu přeci přiřadit tomu a tomu uskupení ten a ten příkaz/y ve strojovém kódu - nebo ano? "
Tohle je docela slozite tema, hodne zjednodusena a nepresna verze, jak to muze vypadat: rozparsujes kod na symboly reprezentujici ten kod, pak si to podle pravidel rozdelis na mensi casti, ktery umis prevest - treba prirazeni do promenny, provedeni aritmeticke operace, volani funkce atd. a z nich pak vygenerujes spustitelnej soubor - symboly nahradis strojovym kodem.

"Pokud ano, tak mne zaráží, jak může mít jazyk vlastní kompilátor - nezaložený na existujícím jazyku... Tedy v čem vůbec bude parser - ten přeci musí být v existujícím jazyku - a jeho parser vznikl jak?"
Prvni byl napsan v strojovem kodu - strojovy kod parser ani kompilator nepotreboval, rovnou provadel instrukce zadane v podobe, ktera pro nej je citelna - stejne tak muzes dneska na pc programovat tim, ze si v poznamkovym bloku otevres novy soubor, pojmenujes ho jako .exe, a zacnes v hex modu psat bajty odpovidajici prislusnemu opkodu strojoveho kodu (ale je to pekne naprd :) ).

"Byl bych moc rád, kdyby mi to někdo odhalil... Docela si to dovedu představit - jen nevím, jak bych napsal ta pravidla - a v čem psát parser - jinak to už je celkem dominový efekt... Děkuji."
Parser muzes napsat v cemkoliv, klidne muzes napsat kompilator pro assembler v c#, v tom ti nic nebrani, ty jen z textu delas strojovy instrukce, tedy posloupnost nejakych bajtu.

Nahoru Odpovědět 30.12.2012 23:16
:)
Avatar
TomBen
Redaktor
Avatar
Odpovídá na matesax
TomBen:31.12.2012 0:08

Já jsem kdysi ve strojáku programoval a přestože to není složité,
už bych se k tomu nevracel. Na každou blbost je totiž potřeba mračna
kódu a jenom vykreslit na obrazovce zarovnané znaky tě zpotí i na zadku.

Svým způsobem máš pravdu, že určitému příkazu ve vyšších jazycích odpovídá
určité množství strojového kódu, jenže toho kódu je prostě moc.
Proto taky vyšší jazyky vznikly. Když musíš udělat hodně práce, začneš tak,
že si na to napíšeš program. A psát program je hodně práce..

Nahoru Odpovědět 31.12.2012 0:08
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.12.2012 5:54

Takže skutečně přiřazuji strojový kód - to je to co mně přišlo divné - když je strojový kód tak specifický - výsledek nepřenositelný jinam...

Nuže mám tedy výstup - strojový kód - nebo ještě interpret a z něj strojový kód - viz. C# a Java - a ten spustím jak?

Jo a vlastně si to parsování mohu usnadnit Regex - ne? :)

Editováno 31.12.2012 5:56
 
Nahoru Odpovědět 31.12.2012 5:54
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.12.2012 6:01

Teď si říkám, že bude blbost psát parser v C# - bude lepší multiplatformní jazyk ne? Jinak bych musel psát tisíce parserů... :)

 
Nahoru Odpovědět 31.12.2012 6:01
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.12.2012 6:12

Joo - blbnu - stroják už bude vlastně onen exe...

 
Nahoru Odpovědět 31.12.2012 6:12
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.12.2012 6:24

Omlouvám se - již jsem konečně našel slušný popis...

http://www.abclinuxu.cz/…a-prekladace

 
Nahoru Odpovědět 31.12.2012 6:24
Avatar
Kit
Redaktor
Avatar
Kit:31.12.2012 9:14

Dnešní překladače už strojový kód moc nedělají. Program většinou zkompilují do kódu nějakého virtuálního procesoru - bajtkód. Pro každou platformu se pak napíše interpretr tohoto bajtkódu nebo JIT kompilátor. Takový program je pak přenositelný.

Editováno 31.12.2012 9:15
Nahoru Odpovědět 31.12.2012 9:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
matesax:1.1.2013 8:56

Než se do toho pustím, chtěl bych se zeptat, zda by se Vám to vůbec líbilo. Jmenoval by se SAM. Zrušil bych dělení na namespace, třídy, struktury,... Bral bych vše jako souhrn příkazů - commands - zkratka cmd:

add // přidání externích souborů
{
    System;
    System.Windows;
}

internal cmd Name : System.Web // dědění - navíc použit modifikátor
{
    var // blok definování proměnných
    {
        int i = 6;
    }

    private var // proměnné s modifikátorem...
    {

    }

    private cmd Name
    {

    } => 6; // návrat

    private cmd Name : System.Net
    {
        cns(parametry) //konstruktor
        {
            var
            {
                int // blok proměnných stejného typu
                {
                    files = 5;
                    names = 8;
                }
            }
        }
    }

    edt cmd Who NewName // úprava existujícího bloku - Who -> upravovaný
    {
        prp // vlastnosti
        {
            int Folders : <= hodnota { } => hodnota // set, možný blok, get

            float Points : modifikátor <= hodnota 0 modifikátor => hodnota // bez bloku s modifikátory

            Point // blok vlastností stejného typu
            {
                Name; // abstraktní
                Name : <= value 0 => value // standart - bez bloku
            }
        }
    }
}

Kde za Name si pochopitelně dáte jméno bloku...

Nejsem si jist, jestli má smysl zakázat možnost editace - ale kdyžtak bych udělal něco jako uned (uneditable). Také si pohraji s maximálním počtem vnoření... :)

Cyklus by byl jediný - cycle - bral by možnosti:

příkaz; bool; příkaz

bool; příkaz

bool

ddd in xxx

Kompilátor se pokusím udělat formou virtuálního stroje - viz. C#, Java...

Editováno 1.1.2013 9:00
 
Nahoru Odpovědět 1.1.2013 8:56
Avatar
matesax
Redaktor
Avatar
matesax:1.1.2013 9:02
Name : <= value 0 => value

Jsem trochu popletl... :) Správně:

Name : <= value 0 => coChceš

Pole standard - []. Jestli si poradím s kolekcemi, tak bude i list... :) (Popř. slovník.)

Editováno 1.1.2013 9:04
 
Nahoru Odpovědět 1.1.2013 9:02
Avatar
matesax
Redaktor
Avatar
matesax:1.1.2013 9:30

Pardon - ještě jedna důležitá věc - bloky var a prp by šlo pojmenovat jako bloky cmd - a tím je tedy i znovu zavolat - a tím vícekrát použít...

 
Nahoru Odpovědět 1.1.2013 9:30
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:1.1.2013 9:49

Raději bych se držel už zavedených klíčových slov import, function, construct, ... Zkracování na 3 znaky ničemu neprospěje. Vím, jak mnozí nadávají na pythonský "def".

Na můj vkus tam máš příliš mnoho složených závorek. Zkus je všechny vypustit.

Začínat obecným programovacím jazykem nepovažuji za nejvhodnější. Zkus něco speciálnějšího, například generátor tiskových sestav nebo naopak zpracování dat z GPS či meteostanice. Můžeš pak zkusit napsat Forth nebo Lisp.

Nahoru Odpovědět 1.1.2013 9:49
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 13 zpráv z 13.