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
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:
#: DECLARE_MIN_MAX_INT
#inserts {
#: MIN_INT // HIBÁS: Ezt nem lehet, insertálni deklarációt nem fog menni...
#IF(#LT) {
#DROP
} [
#SWAP
#DROP
]
#
#: MAX_INT // HIBÁS: Ezt nem lehet, insertálni deklarációt nem fog menni...
#IF(#GT) {
#DROP
} [
#SWAP
#DROP
]
#
}
#inserts: DECLARE_MIN_MAX_INT
#: MIN_INT // HIBÁS: Ezt nem lehet, insertálni deklarációt nem fog menni...
#IF(#LT) {
#DROP
} [
#SWAP
#DROP
]
#
#: MAX_INT // HIBÁS: Ezt nem lehet, insertálni deklarációt nem fog menni...
#IF(#GT) {
#DROP
} [
#SWAP
#DROP
]
#
#
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ó
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 }
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...
Természetesen itt kellhet típust adni:
Talán itt kellhet típust adni:
'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) { ... }
'some_text_word' 21 #inserts (word(W) float(F)) { .... }
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)
}
## 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
- í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:
#passes(pass1 #both(pass2a pass2b) pass3 pass4) {
#pipe(pass1[0] pass2a[0])
#pipe(pass1[1] pass2b[0])
#pipe(pass2a[0] pass3[0])
#pipe(pass3[0] pass4[0])
#pipe(pass2b[0] pass4[0])
}
#passes(pass1 #both(#both(pass2a pass2b) pass3) pass4) {
// Default legyen stdout->stdin pipe? Az egymás utáni pass-ok közt szerintem - amúgy manuálisan írható így le:
#pipe(pass1[stdout] pass2a[stdin])
#pipe(pass1[stderr] pass2b[stdin])
#pipe(pass2a[stdout] pass3[stdin])
#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)
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.
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
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
@ -1753,10 +1771,10 @@ Flag-ek:
1. offset_top
2. offset_top
3. offset_top
4. offset_top
5. offset_top
4. DEF_TYPE0: definíciós típus első bitje
5. DEF_TYPE1: 00: reguláris szó, 01: insertálóként definiált szó
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:
@ -1813,10 +1831,10 @@ Szerintem ezeket inline-olható, function pointerré kéne "elkódolnom", akár
* Engine kódja
* 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)
* 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á.
* 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.)
Megj.: