Banktransacties importeren

Parser

De parser moet een actie kunnen uitvoeren op het moment dat één regel van de invoer herkend is. De complete regel moet dan natuurlijk ook voorhanden zijn. Een deel hiervan is al gerealiseerd doordat we de afzonderlijk herkende woorden opslaan, zoals beschreven. Wat we nog moeten toevoegen is een mechanisme via welk complete regels opgeslagen worden. Dit laatste gebeurd met een stapel (in het Engels 'stack' genaamd).

Wat doet de parser: elke keer als er een correct woord herkend wordt dan zal de parser dit woord op de stapel zetten. Komt de parser tot de conclusie dat de regel compleet is dan haalt hij alle verzamelde woorden van de stapel en voert een actie uit. De afzonderlijke woorden die zich op de stapel bevinden zijn bereikbaar als variabelen met een "$" naam, b.v. $1 voor het eerste woord op de stapel, $2 voor het tweede, enz.

Uiteraard zetten we niet de herkende woordenzelf op de stapel, maar slechts de wijzers (E: pointers) naar de tekens toe. Verwijzend naar de afbeelding Opslag, zullen we de wijzers naar "TEKST1" en "TST2" op de stapel zetten. In de volgende afbeelding Stapel is dit te zien: $1 wijst naar "TEKST1", $2 wijst naar "TST2", enz.

fig4

De stapel, en de relatie tot opslag[]


Om iets met de woorden te doen, hoeven we daarom slechts de volgende acties toe te voegen aan de eerder gedefinieerde parser definitie:

regel: INT EUR INT FLOAT FLOAT INT FLOAT STR
{
  FNDB_store($7, $3, $1, $8);
  FNLX_init();
};

Wat staat hier? Op het moment dat we een geldige regel herkend hebben, halen we de zevende (bedrag), derde (boekdatum), eerste (rekeningnummer) en achtste (omschrijving) woorden van de stapel en bieden deze aan, aan een functie FNDB_store(), tot slot roepen we nog een functie FNLX_init() aan.

De functie FNDB_store() slaat de transactie, gedefinieerd door rekeningnummer, boekdatum, bedrag, en omschrijving op in een MySQL database, mits deze al niet aanwezig is. De functie FNLX_init() wist het geheugen opslag[], de opgeslagen woorden zijn nu niet meer nodig, de opgeslagen regel mag nu verwijderd worden.

$Id: hfst33.html,v 1.20 2016/07/29 18:37:16 luc Exp $Valid XHTML 1.0! Valid CSS 1.0!