Gennerelt forstår jeg ved en parser, at den typisk omsætter teksten til symboler,
således at hvert ord, får et nummer. Dertil, så vil det via en tilstandsmaskine
være nogen tekster, såsom kommentarer som udelukkes, og ikke tages med i den
parsede tekst. Også store og små bogstaver, kan den evt. lade være at skilde
imellem. Samt anførselstegn, vil for flere sprog, medføre at deres indhold gemmes
seperat, og at den så også omsættes til et symbol. Dermed, så bliver hele teksten
komprimeret, til en hel masse symboler, som reelt kun er tal som er fortløbende
fra 0 til n. Og derved, så kan man forholdsvis enkelt holde styr på, og tilknytte
data, til hver enkelt ord, fordi at de kan gemmes i en variebel. Hvis at man
skulle bruge ordende som index, så vil der være milliarder af muligheder, og man
kunne ikke gemme data til dem på en pæn måde i en tabel. F.eks. så kan alle
addresserne gemmes til hvert ord, og f.eks. procedurenavnet får en unik symbol,
og dermed henvisning til et tabelentry, hvori at der står f.eks. en addresse,
eller far addresse, på omtalte "symbol". Også ved sætninger, kan man bruge
symbolværdien, til at holde styr på, hvor at data gemmes i lageret, for det
pågældende symbol. Ialt, så kan man til sidst smide alle ordende væk, og nøjes
med at bruge symbolerne. De oprindelige ord er glemt, og man har kun værdierne
fra 0 - n, hvor at n er antal forskellige ord. De indbyggede ord, dem kan man
hæfte på i starten af ordende i teksten, således at de får de indbyggede navne 0
- k, hvor at k er antal ord, man ønsker at genkende. Også ord, som er deffineret
i andre biblioteker kan hæftes ind forest. Dermed, kan f.eks. "writeln" få en
bestemt nummer, og således får man en nummersekvens, som fortæller præcis hvordan
at ordende hænger sammen. De ting, som skal overføres til compileren, og som ikke
er symboler, altså ordendes reelle indhold - disse kan gemmes. Oftest, så vil man
desuden overføre navne på nogen symboler, i en tabel - hvis at det er et krav,
som styres af tilstandsmaskinen. Altså, f.eks. ord i anførselstegn - her vil hele
sætningen kunne betragtes som et stort symbol, og således opfattes som et samlet
ord, og så også blive gemt så den kan bruges af compileren. Parserens opgave er
altså løst sagt, at omsætte source til symboler. Og så i mange tilfælde, at smide
alt væk - med mindre, det står i anførselstegn. Og til gengæld, så kan den så
genkende indbyggede ord, fordi at disse er inkluderet i toppen, og samtidig også
genkende andre ord, som inkluderes i toppen. De kan komme fra andre filer som
skal kædes sammen med denne. Princippet er altså enkelt i mange tilfælde: at
sætte nogen ord som skal genkendes øverst, og så læse ordende fra teksten, og at
undersøge om disse er i tabellen. Ellers, så tilføjes de, og får et nyt nummer.
TIl sidst får man en nummerrækkefølge af ordende, hvor at de oprindelige ord, har
de mindste numre. Og dertil, så sørger man for, at videregive informationer som
står i anførselstegn, eller andet som man har brug for at overlevere for det
pågældende sprog, til compileren. Når compileren modtager det, så er det symboler
- og det vil i praksis være numre, som går fra 0 til n, og som således er
begrænset til at anvende en begrænset mængde plads. Også teksten vil ofte blive
meget mere kompakt når den omsættes til symboler, og man kan betragte det som en
form for komprimering. I basic, og comal, gemmer man direkte ord internt som
symboler, f.eks. så gemmes en symbolværdi direkte på ZX81 når at man taster
print. Dette svarer måske en smule til parsing, selvom det måske ikke er helt det
samme - f.eks. så er det her kun de indbyggede ord, og der håndteres ikke
selvdefinerede navne, såsom det gør som til sprog som pascal. Umiddelbart, så kan
parsing måske også være andre ting, og det betyder oftest ikke nødvendigvis
ovenstående, selvom det er meget rart at kende.
|