Download Game! Currently 122 players and visitors. Last logged in:SolvikStylusIberiamsspTigerlily

Blitzer's Blog >> 71952

Back to blogs index
Posted: 03 Sep 2026 14:10 [ permalink ]
TC$mC$ on erinomainen kysymys. Koska olet tyC6skennellyt kC$C$ntC$jC$moottoreid
en, lekserien ja jC$senninten parissa, AST-MD -parserin rakentaminen noudattaa
tC$ysin samoja periaatteita: leksikaalinen analyysi (Lexing), syntaktinen
analyysi (Parsing/State Machine) ja koodin generointi (JavaScript-objektien
luonti).
Isomorfisen ja turvallisen parserin ydin on se, ettC$ se ei riipu mistC$C$n
ajoympC$ristC6n omista kirjastoista (kuten Node.js:n fs tai selaimen DOM),
vaan se prosessoi puhdasta merkkijonovirtana (String Stream).
TC$ssC$ on arkkitehtuurisuunnitelma ja toteutusmalli AST-MD -parserille.
1. Turvallisuuden kulmakivet (Security First)
Kun luodaan objekteja tuntemattomasta tekstisyC6tteestC$ (varsinkin tekoC$lyn
generoimasta), on torjuttava kaksi yleisintC$ hyC6kkC$ysvektoria:
Prototype Pollution (Prototyyppisaastutus): HyC6kkC$C$jC$ (tai hallusinoiva
tekoC$ly) syC6ttC$C$ avaimen __proto__, constructor tai prototype, joka
ylikirjoittaa globaalien objektien metodeja.
Ratkaisu: Objektit luodaan aina muodossa Object.create(null) tavallisen {}
sijaan, jolloin niillC$ ei ole perittyC$ prototyyppiketjua. Vaihtoehtoisesti
sisC$isessC$ muistissa kC$ytetC$C$n aina Map-rakennetta.
Mielivaltaisen koodin suoritus: VC$ltetC$C$n ehdottomasti eval()- tai new
Function() -kutsuja.
Ratkaisu: Arvojen tyypittC$minen tehdC$C$n tiukoilla sC$C$nnC6illC$ (Regex /
turvallinen JSON.parse vain yksittC$isille arvoille/taulukoille).
2. JC$sennysputki (Parsing Pipeline)
VC$likarsinta (Sanitization)SyC6te normalisoidaan. Rivinvaihdot
yhtenC$istetC$C$n (\r
 -> 
) ja tyhjC$t rivit suodatetaan pois, elleivC$t ne ole osa monirivistC$ arvoa.
Leksikaalinen analyysi (Tokenization)Rivikohtainen lekseri tunnistaa
sC$C$nnC6llisillC$ lausekkeilla (Regex), onko rivi kokoelman otsikko (#),
objektin tunniste (##), metadataa (>), vai avain-arvopari (-). RiveiltC$
mitataan myC6s sisennyksen taso (indentation), joka mC$C$rittC$C$ AST-puun
syvyyden.
Tilakone (State Machine) & PinojC$sennin (Stack Parser)KC$ydC$C$n tokenit
lC$pi. Tilakone pitC$C$ kirjaa nykyisestC$ kokoelmasta ja objektista. Pino
(Stack) pitC$C$ kirjaa sisC$kkC$isistC$ objekteista sisennystason perusteella,
jotta esimerkiksi - yhteyshenkilo: alle tulevat kentC$t sijoitetaan oikeaan
ali-objektiin.
3. Isomorfinen Toteutusmalli (JavaScript / ES6)
TC$mC$ konseptikoodi toimii tC$ydellisesti sekC$ Chromen V8:ssa ettC$
Node.js:ssC$. Se kC$yttC$C$ puhdasta ECMAScriptiC$ ja pinojC$sennystC$
(Stack-based parsing).
 * AST-MD Parseri - Turvallinen ja isomorfinen
 */
export class ASTMDParser {
  // ...
}

Arkkitehtuurin hyC6dyt
Lineaarinen monimutkaisuus (O(N)): Parseri lukee datan kerran ylhC$C$ltC$
alas. Suurenkin lokitiedoston lukeminen RAM-muistiin Node.js:ssC$ on erittC$in
nopeaa, ja muistinkulutus pysyy hallinnassa, kun objekteja ei pyC6ritetC$
raskaiden regex-koneistojen lC$pi moneen kertaan.
LLM-Toleranssi: SC$C$nnC6lliset lausekkeet (match(/^(\s*)-\s*([^:]+):?(.*)/))
antavat tekoC$lylle anteeksi pienet muotoiluvirheet, kuten vaihtelevat
vC$lilyC6nnit kaksoispisteen ympC$rillC$.
Ei riippuvuuksia: Moduuli voidaan suoraan importata Chromen Service
Workerissa, Node.js Fastify -palvelimella tai React-kC$yttC6liittymC$ssC$
tC$ysin muuttumattomana.