Patternsuche: Implementierung in C
Zum Vergleich Automat/Schaltwerk in Soft- und Hardware
#include <stdio.h>
enum states {S0=0, S1,S2,S3,S4};
enum pattern {a=0, b,c,d,e,others};
enum pattern char2pat(int);
void main(void)
{
int ch;
enum pattern z;
enum states current = S0; // S0 ist Anfangszustand
enum states next;
// Zustandstabelle
enum states state_tab[5][6] = {
{S1,S0,S0,S0,S0,S0},
{S1,S4,S0,S2,S0,S0},
{S1,S0,S0,S0,S3,S0},
{S1,S0,S0,S0,S0,S0},
{S1,S0,S4,S0,S3,S0}
};
while((ch = fgetc(stdin)) != EOF){
z = char2pat(ch);
next = state_tab[current][z];
current = next;
if(current == S3)
printf("Pattern Found \n");
}
}
enum pattern char2pat(int ch)
{
switch(ch){
case 'a': return (enum pattern)a;
case 'b': return (enum pattern)b;
case 'c': return (enum pattern)c;
case 'd': return (enum pattern)d;
case 'e': return (enum pattern)e;
default: return (enum pattern)others;
}
}