// Abb0.java: recognize (a|b)*abb
import java.io.*;
public class Abb0 {
public static void main(String[]
args){
GetChar getChar = new GetChar();
char ch;
int state = 0;
while (true) {
ch = getChar.getNextChar();
if (ch == '$') break; // while
switch (state) {
case 0: if (ch == 'a') state = 1;
else if (ch == 'b') state = 0;
break;
case 1: if (ch == 'a') state = 1;
else if (ch == 'b') state = 2;
break;
case 2: if (ch == 'a') state = 1;
else if (ch == 'b') state = 3;
break;
case 3: if (ch == 'a') state = 1;
else if (ch == 'b') state = 0;
break;
}
System.out.print("ch: " + ch + ",
next state: " + state);
if (state == 3)
System.out.print(" Terminal");
System.out.print("\n");
}
if (state == 3)
System.out.print("Accept\n");
else System.out.print("Reject\n");
}
}
// Version without everything in main |
// abb.c: recognize (a|b)*abb
#include <stdio.h>
int main() {
char ch;
int state = 0;
while (1) {
ch = getchar();
if (ch == '$') break; // while
switch (state) {
case 0: if (ch == 'a') state = 1;
else if (ch == 'b') state = 0;
break;
case 1: if (ch == 'a') state = 1;
else if (ch == 'b') state = 2;
break;
case 2: if (ch == 'a') state = 1;
else if (ch == 'b') state = 3;
break;
case 3: if (ch == 'a') state = 1;
else if (ch == 'b') state = 0;
break;
}
printf("ch: %c, next state: %i",
ch, state);
if (state == 3)
printf(" Terminal");
printf("\n");
}
if (state == 3) printf("Accept\n");
else printf("Reject\n");
}
| // abb1.c: recognize (a|b)*abb
#include <stdio.h>
void printit(int state, char ch);
int main() {
char ch;
L0: ch = getchar();
printit(0, ch);
if (ch == '$') goto L4;
if (ch == 'a') goto L1;
else if (ch == 'b') goto L0;
L1: ch = getchar();
printit(1, ch);
if (ch == '$') goto L4;
if (ch == 'a') goto L1;
else if (ch == 'b') goto L2;
L2: ch = getchar();
printit(2, ch);
if (ch == '$') goto L4;
if (ch == 'a') goto L1;
else if (ch == 'b') goto L3;
L3: ch = getchar();
printit(3, ch);
if (ch == '$') goto L5;
if (ch == 'a') goto L1;
else if (ch == 'b') goto L0;
L4: printf("Reject\n");
return;
L5: printf("Accept\n");
}
void printit(int state,char ch){
printf("In state: %i,
char=%c", state, ch);
if (state == 3)
printf(" Terminal");
printf("\n");
} |
// GetChar: fetch next char
import java.io.*;
public class GetChar {
private Reader in; // input
// GetChar: constructor
public GetChar () {
in = new
InputStreamReader(System.in);
}
// getNextChar: next char
public char getNextChar() {
char ch = ' ';
try {
ch = (char)in.read();
} catch (IOException e) {
System.out.println("Excpt");
}
return ch;
}
}
| % cc -o abb -Wall abb.c
% ./abb
abaababb$
ch: a, next state: 1
ch: b, next state: 2
ch: a, next state: 1
ch: a, next state: 1
ch: b, next state: 2
ch: a, next state: 1
ch: b, next state: 2
ch: b, next state: 3 Terminal
Accept
% ./abb
abaababbab$
ch: a, next state: 1
ch: b, next state: 2
ch: a, next state: 1
ch: a, next state: 1
ch: b, next state: 2
ch: a, next state: 1
ch: b, next state: 2
ch: b, next state: 3 Terminal
ch: a, next state: 1
ch: b, next state: 2
Reject
| % ./abb1
abaababb$
In state: 0, char = a
In state: 1, char = b
In state: 2, char = a
In state: 1, char = a
In state: 1, char = b
In state: 2, char = a
In state: 1, char = b
In state: 2, char = b
In state: 3, char = $ Terminal
Accept
./abb1
abaababbab$
In state: 0, char =
In state: 1, char =
In state: 2, char = a
In state: 1, char = b
In state: 2, char = a
In state: 1, char = a
In state: 1, char = b
In state: 2, char = a
In state: 1, char = b
In state: 2, char = b
In state: 3, char = a Terminal
In state: 1, char = b
In state: 2, char = $
Reject
|