Inleiding -- kan overgeslagen worden wanneer dit niet als QuickFix topic beschouwd wordt
Ik ben bezig met de implementatie van een finite state machine (niet- deterministische eindige automaat - NEA). Er zijn verschillende manieren om dit te doen, en mijn voorkeur ging uit naar een event-driven model, waarbij elke verandering van de state een event is, wat door een bepaalde functie wordt afgehandeld.
Ik heb op papier een mooie NEA ontworpen en ik ben nu toe aan de implementatie fase. Elke vertex van de graaf is een functie, en elke edge in de graaf is een invoerwaarde voor de automaat. De invoer bestaat uit steeds 1 char.
De brakke code
Ik maak gebruik van function pointers om de implementatie zo simpel mogelijk te houden, maar gaat helaas al mis bij definities in de header file!
De compiler (GCC 3.3) zegt bij de declaratie van de function pointer en de prototypes van de verschillende functies het volgende:
error: parse-fout before '*' token
Dit gebeurt met en zonder de compiler opties "-Wall -pedantic -ansi -O2"
Ik zie de fout niet!
"UTFS!
"
Ik heb de FAQ gelezen, de search gebruikt, etc. In de FAQ staat dat "QuickFix" topics niet zijn toegestaan, voordat dit als QuickFix topic beschouwd wordt
, wil ik er bij zeggen dat discussies over mooie implementaties van NEA's wat mij betreft on-topic zijn
.
Ik ben bezig met de implementatie van een finite state machine (niet- deterministische eindige automaat - NEA). Er zijn verschillende manieren om dit te doen, en mijn voorkeur ging uit naar een event-driven model, waarbij elke verandering van de state een event is, wat door een bepaalde functie wordt afgehandeld.
Ik heb op papier een mooie NEA ontworpen en ik ben nu toe aan de implementatie fase. Elke vertex van de graaf is een functie, en elke edge in de graaf is een invoerwaarde voor de automaat. De invoer bestaat uit steeds 1 char.
De brakke code
Ik maak gebruik van function pointers om de implementatie zo simpel mogelijk te houden, maar gaat helaas al mis bij definities in de header file!
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| /* StateMachine is een structuur waar de pointer naar de huidige state in wordt opgeslagen. Dit is een forward declaratie, anders werkt die volgende typedef niet */ typedef struct StateMachine TStateMachine; /* StateProc is de function pointer die gebruikt wordt om elke state in de automaat de representeren. Argument "StateMachine *sm" bevat de huidige state van de automaat, en input is de... input. */ typedef void (*StateProc)(StateMachine * sm, char input); /* Nu StateProc is gedeclareerd, kan de struct StateMachine verder worden gedefinieerd. Misschien worden hier in de toekomst extra velden aan toegevoegd */ struct StateMachine { StateProc curState; }; /* de prototypes voor de verschillende states in de automaat (StateProc functies) */ void handle_slash(StateMachine * sm, char input); void handle_error(StateMachine * sm, char input); void handle_alphanumeric(StateMachine * sm, char input); void handle_close_request(StateMachine * sm, char input); void handle_acknowledgement(StateMachine * sm, char input); |
De compiler (GCC 3.3) zegt bij de declaratie van de function pointer en de prototypes van de verschillende functies het volgende:
error: parse-fout before '*' token
Dit gebeurt met en zonder de compiler opties "-Wall -pedantic -ansi -O2"
Ik zie de fout niet!
"UTFS!
Ik heb de FAQ gelezen, de search gebruikt, etc. In de FAQ staat dat "QuickFix" topics niet zijn toegestaan, voordat dit als QuickFix topic beschouwd wordt
[ Voor 3% gewijzigd door terabyte op 05-12-2003 13:10 . Reden: layout ]