egy kis slc változtatás itt-ott
This commit is contained in:
parent
81890e9aa3
commit
37872eb496
106
BASED.md
106
BASED.md
@ -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 tartozhatnának 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.:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user