#include <stdio.h>
#include <stdlib.h>
int lex_i = 0;
int lex_n;
char lex_c[4096];
int dot (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if (lex_c[lex_i] == '.') {
lex_i += 1;
return 1;
}
else {
printf("Sorry missing 'dot'");
exit(1);
}
}
int car (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 'A') && \
(lex_c[lex_i+1] == 'u') && \
(lex_c[lex_i+2] == 't') && \
(lex_c[lex_i+3] == 'o')) {
lex_i += 4;
return 1;
}
else
return 0;
}
int tree (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 'B') && \
(lex_c[lex_i+1] == 'a') && \
(lex_c[lex_i+2] == 'u') && \
(lex_c[lex_i+3] == 'm')) {
lex_i += 4;
return 1;
}
else
return 0;
}
int house (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 'H') && \
(lex_c[lex_i+1] == 'a') && \
(lex_c[lex_i+2] == 'u') && \
(lex_c[lex_i+3] == 's')) {
lex_i += 4;
return 1;
}
else
return 0;
}
int caesar (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 'C') && \
(lex_c[lex_i+1] == 'a') && \
(lex_c[lex_i+2] == 'e') && \
(lex_c[lex_i+3] == 's') && \
(lex_c[lex_i+4] == 'a') && \
(lex_c[lex_i+5] == 'r') ) {
lex_i += 6;
return 1;
}
else
return 0;
}
int computer (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 'R') && \
(lex_c[lex_i+1] == 'e') && \
(lex_c[lex_i+2] == 'c') && \
(lex_c[lex_i+3] == 'h') && \
(lex_c[lex_i+4] == 'n') && \
(lex_c[lex_i+5] == 'e') && \
(lex_c[lex_i+6] == 'r') ) {
lex_i += 7;
return 1;
}
else
return 0;
}
int speaks (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 's') && \
(lex_c[lex_i+1] == 'p') && \
(lex_c[lex_i+2] == 'r') && \
(lex_c[lex_i+3] == 'i') && \
(lex_c[lex_i+4] == 'c') && \
(lex_c[lex_i+5] == 'h') && \
(lex_c[lex_i+6] == 't') ) {
lex_i += 7;
return 1;
}
else
return 0;
}
int walks (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 'g') && \
(lex_c[lex_i+1] == 'e') && \
(lex_c[lex_i+2] == 'h') && \
(lex_c[lex_i+3] == 't') ) {
lex_i += 4;
return 1;
}
else
return 0;
}
int hates (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 'h') && \
(lex_c[lex_i+1] == 'a') && \
(lex_c[lex_i+2] == 's') && \
(lex_c[lex_i+3] == 's') && \
(lex_c[lex_i+4] == 't') ) {
lex_i += 5;
return 1;
}
else
return 0;
}
int hears (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 'h') && \
(lex_c[lex_i+1] == 'o') && \
(lex_c[lex_i+2] == 'e') && \
(lex_c[lex_i+3] == 'r') && \
(lex_c[lex_i+4] == 't') ) {
lex_i += 5;
return 1;
}
else
return 0;
}
int watches (void) {
while ((lex_c[lex_i] == ' ') || (lex_c[lex_i] == '\t') || (lex_c[lex_i] == '\n'))
lex_i++;
if ((lex_c[lex_i+0] == 's') && \
(lex_c[lex_i+1] == 'c') && \
(lex_c[lex_i+2] == 'h') && \
(lex_c[lex_i+3] == 'a') && \
(lex_c[lex_i+4] == 'u') && \
(lex_c[lex_i+5] == 't') ) {
lex_i += 6;
return 1;
}
else
return 0;
}
int verb () {
int retval;
if(walks() == 0) {
if(speaks() == 0) {
if(hates() == 0) {
if(watches() == 0) {
if(hears() == 0) {
printf("Sorry my german is not so good - but maybe the verb is wrong!");
exit(1);
}
}
}
}
}
}
int subject () {
int retval;
if(car() == 0) {
if(house() == 0) {
if(caesar() == 0) {
if(tree() == 0) {
if(computer() == 0) {
printf("Sorry my german is not so good - but maybe the subject is wrong!");
exit(1);
}
}
}
}
}
}
int sentence () {
subject();
verb();
}
int text () {
sentence();
dot();
if (lex_i == (lex_n-2))
printf("Good text");
else
text();
}
int main(int argc, char *argv[]) {
FILE *fp;
if((fp = fopen(argv[1], "r")) == NULL) {
perror("Can't open file");
exit(1);
}
while (!feof(fp))
lex_c[lex_i++] = fgetc(fp);
lex_n = lex_i;
lex_i = 0;
text();
fclose(fp);
return 0;
}