Mám pocit, že stále dochází k nepochopení.
Proto snad píšeš ten parser, který zpracuje kód před posláním na překladač, tedy i ten tvůj text v uvozovkách převede na nějakou konstantu typu String
Ovšem, ale typ String z pohledu parseru neexistuje. Neexistuje žádný typ. Jen konstrukce jako je interval, množina, ukazatel na typ, pole, záznam a třída.
Mohl bys vysvětlit jak ten tvůj překladač má fungovat?
Jistě, nejdříve se nad textem provede lexikální analýza, která rozdělí text na lexémy, se kterými se dál provede v parseru rozbor. Vytvoří se syntaktické stromy (AST), které se dál optimalizují a pokračují do druhé fáze "back-endu", kde dojde k přeložení z AST do ASM/strojového kódu. Parser není závislý na platformě a počtu bitů. Zároveň však neimplementuje žádný typ.
Čeho hodláš docílit oddělením asi knihoven/jmeného prostoru(nebo jak se tomu nadává v Packalu) System?
Tím, že nebudu muset programovat typy jako integer, real, string vnitřně v parseru, ale jako konstrukce. Zjednoduší se jednak překladač, kterej má teď přibližně 10000 řádků kódu "front-endu", a jednak bude snazší editovat knihovnu než celý překladač při změně platformy.
Systém ale teď nemá cenu řešit, dokud nemám nástroj na jeho vytvoření.
Neumět si definovat si vlastní datový typ, nemít představu, jak se parsuje kód a s tím chtít napsat OS?
Myslím, že právě tady došlo k nepochopení. Není to o neumět si definovat vlastní datový typ, ale o nemožnosti přiřadit lexém řetězce, znaku, reálného čísla konstrukci, která neexistuje - Stringu, Charu, Realu...
Freepascal i GNU pascal, implementují typy vnitřně, ba implementují celou jednotku System. Snažím se od tohoto osvobodit a odstranit pár vad (v mých očích), které se mi na pascalu nelíbí. Například procedura Write z jednotky System nelze v jazyce Pascal napsat, protože jazyk Pascal neumožňuje libovolný počet argumentů, stejně tak nezná ani dvojtečku a číslo za argumentem. Kompilátor tedy musí tuto funkci mít integrovanou v sobě - což není zrovna to, co si představuji pod slovem ideální.
Jazyk to bude stále jako standardní Pascal, ale bez procedur Write, Read, Assign, Inc, Dec..., typů Integer, LongInt, Real, String, Byte, Char..., proměnných Input, Output, a konstant, až na Nil, kterou implementuji, protože je to klíčové slovo. String je také klíčové slovo, ale kdybych to zahrnul ho parseru, tak to sice vyřeší celý problém kolem Stringu, ale stejný problém zůstane u typu Char i Real... a po zahrnutí těchto typů sice už nebudu mít problém žádný, ale pak už bude zbytečný mít oddělenou jednotku System, a při změně systému budu muset přepisovat téměř celý překladač a nebude to "ideální" řešení.
Ještě mě napadlo zavést něco jako makra s regulárním výrazem pro řešení uvozovka-text-uvozovka nebo číslo-tečka-číslo-e-číslo, ale stejně nevím, jak to přiřadit k typu a jak to udělat Pascalovsky, aby to nebylo jen "lepení".
A co si od toho slibuji? například zápisy jako:
RealneCislo := 3.14;
KomplexniCislo := 14 + 4i;
PocetJablek := 15j;
PocetMetru := 90 m;
Prodleva := 1000 ms;
Retezec := 'ahoj svete';
Pripadne := "retezec na
nekolik
radku";
A díky silné typové kontrole mi to zahlásí chybu, když se budu snažit přiřadit do proměnné PocetMetru číslo v desítkové soustavě. Mimochodem, třeba zrovna ta desítková soustava. Co když budu chtít stopy nebo dvanáctkovou soustavu? Je mnohem přehlednější, napsat ji ve formátu, ve kterém ji píšu i tužkou na papír.