egy kis slc változtatás itt-ott

This commit is contained in:
Richard Thier 2024-09-13 18:03:41 +02:00
parent 81890e9aa3
commit 37872eb496

106
BASED.md
View File

@ -1325,27 +1325,27 @@ Ezt valahogy talán jó lenne támogatni, de lehet hogy felesleges. Ezzel nem cs
hanem jelenleg ahol tart a végrehajtás, azt a programszöveget tudnánk módosítani. A fordításhoz szerintem ez hanem jelenleg ahol tart a végrehajtás, azt a programszöveget tudnánk módosítani. A fordításhoz szerintem ez
nem kifejezetten ad plusz funkcionalitást, de az interpreterként működéshez viszont igen... nem kifejezetten ad plusz funkcionalitást, de az interpreterként működéshez viszont igen...
FONTOS: Itt (state-machine) a body-ban nem lehet #insert-esen deklarált szó, mert
Ennek megfelelően valami hasonló lehetne: Ennek megfelelően valami hasonló lehetne:
#: DECLARE_MIN_MAX_INT #inserts: DECLARE_MIN_MAX_INT
#inserts { #: MIN_INT // HIBÁS: Ezt nem lehet, insertálni deklarációt nem fog menni...
#: MIN_INT // HIBÁS: Ezt nem lehet, insertálni deklarációt nem fog menni... #IF(#LT) {
#IF(#LT) { #DROP
#DROP } [
} [ #SWAP
#SWAP #DROP
#DROP ]
] #
# #: MAX_INT // HIBÁS: Ezt nem lehet, insertálni deklarációt nem fog menni...
#: MAX_INT // HIBÁS: Ezt nem lehet, insertálni deklarációt nem fog menni... #IF(#GT) {
#IF(#GT) { #DROP
#DROP } [
} [ #SWAP
#SWAP #DROP
#DROP ]
] #
#
}
# #
Megj.: Megj.:
@ -1359,25 +1359,16 @@ nyers programszöveg - itt az olvasó fej már ugyebár beolvasta a `DECLARE_MIN
és olyan eredményt kapunk, mintha az adott dolgokat titkon oda gépelte volna valaki, szóval amint kész ezen szó és olyan eredményt kapunk, mintha az adott dolgokat titkon oda gépelte volna valaki, szóval amint kész ezen szó
futtatása, a rendszer a #: deklarációs szót fogja az inputján látni. Ezzel az input kiegészítésre került! futtatása, a rendszer a #: deklarációs szót fogja az inputján látni. Ezzel az input kiegészítésre került!
A #inserts-hez tartozhatnak paraméterek: A #inserts-hez jó lenne, ha tartozhatnak paraméterek:
42 21 #inserts (N K) { #push($N) #writechar #push($K) #push(2) #imul #writechar } 42 21 #inserts (N K) { #push($N) #writechar #push($K) #push(2) #imul #writechar }
Természetesen ez sokkal érdekesebb, ha nem így magában áll, hanem szó deklarációban, de a lényeg, Természetesen ez sokkal érdekesebb, ha nem így magában áll, hanem szó deklarációban, de a lényeg,
hogy a zárójelek között felsorolhatok dolgokat, ami a stack-ről értéket kap. A $$ a $ escape-elése csupán... hogy a zárójelek között felsorolhatok dolgokat, ami a stack-ről értéket kap. A $$ a $ escape-elése csupán...
Természetesen itt kellhet típust adni: Talán itt kellhet típust adni:
'some text word' 21 #inserts (word(W) float(F)) { .... } 'some_text_word' 21 #inserts (word(W) float(F)) { .... }
Az inserts továbbá rendelkezhet output átirányítós paraméterrel:
#inserts [0] { ... }
^^Ez például a 0.-dik kimenetre / pipe-ra ír, szerintem erre külön kéne saját szó:
#outputs { ... }
42 21 #errors (N K) { ... }
Az insert-hez szükséges: Az insert-hez szükséges:
@ -1514,7 +1505,7 @@ Ebből legyen - útána meg már elvileg nem olyan nehéz:
EXITWHEN(a == 42) EXITWHEN(a == 42)
} }
## A makró nyelven a FORTH-szerű szavaknak változói / adattagjai is lehetnek (nem csak kódja)! ## VÁLTOZÓK: A makró nyelven a FORTH-szerű szavaknak változói / adattagjai is lehetnek (nem csak kódja)!
- a szóhoz tartozó olvasása a stack-re tehát csak a neve, illetve a kukacos neve - a szóhoz tartozó olvasása a stack-re tehát csak a neve, illetve a kukacos neve
- írása meg a zárójelbe tett dolgot írja bele - kivéve hogy ha ott "pont" áll akkor a stack tetejét írja bele és csőváz - írása meg a zárójelbe tett dolgot írja bele - kivéve hogy ha ott "pont" áll akkor a stack tetejét írja bele és csőváz
@ -1695,18 +1686,45 @@ Megj.: Bár van fájl kezelés, de szerintem alapvetően inkább a pass leíró
Talán valami ilyesmi: Talán valami ilyesmi:
#passes(pass1 #both(pass2a pass2b) pass3 pass4) { #passes(pass1 #both(#both(pass2a pass2b) pass3) pass4) {
#pipe(pass1[0] pass2a[0]) // Default legyen stdout->stdin pipe? Az egymás utáni pass-ok közt szerintem - amúgy manuálisan írható így le:
#pipe(pass1[1] pass2b[0]) #pipe(pass1[stdout] pass2a[stdin])
#pipe(pass2a[0] pass3[0]) #pipe(pass1[stderr] pass2b[stdin])
#pipe(pass3[0] pass4[0]) #pipe(pass2a[stdout] pass3[stdin])
#pipe(pass2b[0] pass4[0]) #pipe(pass3[stdout] pass4[stdin])
} #pipe(pass2b[stdout] pass4[stdin])
} // stdin, stdout és stderr mellett ott szerepelhet "név" is! Ebben lehet "kiterjesztés" is, tehát fájlra / pipe-ra fordul!
// A pipe sorrend majdnem mindegy, de "törekedjünk" a "jó" sorrendre, mert nem hash, hanem tömb keresős ábrázolás lesz?
Ezzel a megadott lépéseket futtatjuk az input fájlon úgy, hogy az adott standard output/error (és egyéb max 8) Ezzel a megadott lépéseket futtatjuk az input fájlon úgy, hogy az adott standard output/error (és egyéb max 8)
kimeneteiket a pipe-ok segítségével gráfosan kötjük össze. Természetesen csak DAG lehet az a gráf, különben kimeneteiket a pipe-ok segítségével gráfosan kötjük össze. Természetesen csak DAG lehet az a gráf, különben
sose fog lefutni a történet majd - erre gondolom nem árt majd valami check is. sose fog lefutni a történet majd - erre gondolom nem árt majd valami check is.
Alternatíva(jobban tetszik):
#passes(
lexer
stop_if_error(stdout){}
parse_blocks{imports.tmp types.tmp vars.tmp funcs.tmp components.tmp}
handle_imports(imports.tmp){names.tmp}
handle_types(types.tmp)
handle_vars(vars.tmp){names.tmp}
#parallel(
handle_names(names.tmp){names_bytecodes.tmp}
handle_funcs(funcs.tmp){funcs_bytecodes.tmp}
handle_components(components.tmp){component_bytecodes.tmp}
)
write_asm(names_bytecodes.tmp funcs_bytecodes.tmp component_bytecodes.tmp){out.asm}
assemble()
)
Mit jelent ez?
* A pass inputja (..) közötti, az outputja {..}. A neve egy "szó" (ami már "fentebb" definiált kell legyen, vagy include-olt)
* Ez a szó független stack-ekkel fut: Vagy van nekik sajátjuk (valódi párhuzamosság), vagy szekvenciális és törlődik a stack...
*
Ez igazából "meta-nyelvi elem" is lett így, hiszen a pass-ok és a both esetén is a paraméterek másolatokat Ez igazából "meta-nyelvi elem" is lett így, hiszen a pass-ok és a both esetén is a paraméterek másolatokat
fognak csak kapni a stack-jeikből és azok "párhuzamosan" futnak, amennyiben ez lehetséges. Ha nem lehet, akkor fognak csak kapni a stack-jeikből és azok "párhuzamosan" futnak, amennyiben ez lehetséges. Ha nem lehet, akkor
természetesen sorban futnak le, balról-jobbra kiértékeléssel. Mindazt amit művelnek a kimeneteiken, egymásba természetesen sorban futnak le, balról-jobbra kiértékeléssel. Mindazt amit művelnek a kimeneteiken, egymásba
@ -1753,10 +1771,10 @@ Flag-ek:
1. offset_top 1. offset_top
2. offset_top 2. offset_top
3. offset_top 3. offset_top
4. offset_top 4. DEF_TYPE0: definíciós típus első bitje
5. offset_top 5. DEF_TYPE1: 00: reguláris szó, 01: insertálóként definiált szó
6. TYPE0: a típus első bitje 6. TYPE0: a típus első bitje
7. TYPE1: a típus második bitje (00 - szöveg és futtatatlan, 01 - szöveg és futtatott, 11 - THREADED és futtatott 7. TYPE1: a típus második bitje (00 - szöveg és futtatatlan, 01 - szöveg és futtatott, 10 - THREADED, 11 - internal (C ptr)
EDIT: EDIT:
@ -1813,10 +1831,10 @@ Szerintem ezeket inline-olható, function pointerré kéne "elkódolnom", akár
* Engine kódja * Engine kódja
* Callstack - előre adott méret (pl. parancssori paraméter, vagy embeddednél beállított) * Callstack - előre adott méret (pl. parancssori paraméter, vagy embeddednél beállított)
* Insert-stack - az input "nyelének" kiegészítésére egy char elemekből álló stack
* Adatstack, a műveleteivel - előre adott méret (pl. parancssori paraméter, vagy embeddednél beállított) * Adatstack, a műveleteivel - előre adott méret (pl. parancssori paraméter, vagy embeddednél beállított)
* Szimbólumtáblára MAP adatstruktúra (pl. kismap - név alapú lookupra + változó tároláshoz is [key alapján tudható melyik!]) * Insert-stack - az input "nyelének" kiegészítésére egy char elemekből álló stack
* Session storage - egy charakter vektorhoz hasonló, de csak állandóan növő storage + session reset rá. * Session storage - egy charakter vektorhoz hasonló, de csak állandóan növő storage + session reset rá.
* Szimbólumtáblára MAP adatstruktúra (pl. kismap - név alapú lookupra + változó tároláshoz is [key alapján tudható melyik!])
* IO accessor (fájlműveletek, pipe-ok stb.) * IO accessor (fájlműveletek, pipe-ok stb.)
Megj.: Megj.: