#include char *PgmName=0; int ShowLit=0; int ShowProd=1; int ShowBNF=0; int ProdNbr=0; int FirstProd=0; int ErrorCnt=0; char pc='x'; char cc; int lp=0; void main(argc, argv) int argc; char **argv; { PgmName = *argv; --argc, ++argv; while (argc && ((**argv == '-') || (**argv == '+'))) { char *cp=&argv[0][1]; while (*cp) { switch (*cp) { default: exit(-1); } ++cp; } --argc, ++argv; } if (argc && (freopen(*argv, "r", stdin) == NULL)) { perror(PgmName); exit(-1); } yylex(); exit(ErrorCnt); } %% [a-z][a-z0-9A-Z_]* NonTerminal(yytext); "KEYWORD_"[A-Z][A-Z0-9_]* Keyword(yytext); [A-Z][A-Z0-9_]* Terminal(yytext); ":"$ printf(" ::= "); "'"[^{}]"'" SingleChar(yytext); "'"[{}]"'" Squigly(yytext); "\t" printf("\\tab "); ^[\t ][\t ]*"\n" ; "\n" printf("\\par \n"); ^";\n" printf("\\par \n"); . ECHO; %% #define PLAIN "\\plain \\f16\\fs20" #define BOLD "\\b\\f16\\fs20" SingleChar(char* text) { printf("%s \"%s %c%s \"", "\\plain \\f16\\fs20", "\\b\\f16\\fs20", text[1], "\\plain \\f16\\fs20"); } Squigly(char* text) { printf("%s \"%s \\%c%s \"", "\\plain \\f16\\fs20", "\\b\\f16\\fs20", text[1], "\\plain \\f16\\fs20"); } int NonTerminal(char* text) { printf("<%s>", text); } int Terminal(char* text) { char *my_text, *malloc(); char c; int i; my_text = malloc(strlen(text)+1); my_text[0] = text[0]; // ASCII conversion to lower case for (i=1; (c = text[i]) != '\0'; i++) { if ( 'A' <= c && c <= 'Z' ) { my_text[i] = 'a' + c - 'A'; } else { my_text[i] = c; } } my_text[i] = c; printf("<%s>", my_text); // printf("%s <%s>%s", PLAIN, my_text, PLAIN); free(my_text); } int Keyword(char* text) { char *my_text, *malloc(); char c; int i; my_text = malloc(strlen(text)+1); // ASCII conversion to lower case for (i=0; (c = text[i+8]) != '\0'; i++) { if ( 'A' <= c && c <= 'Z' ) { my_text[i] = 'a' + c - 'A'; } else { my_text[i] = c; } } my_text[i] = c; // printf("\"%s\"", my_text); printf("%s \"%s %s%s \"", PLAIN, BOLD, my_text, PLAIN); free(my_text); } int check(char cc) { if( pc!='\'' ) { switch(cc) { case '{': lp++; break; case '}': lp--; break; default: if (lp==0) ECHO; break; } } else { if (lp==0) ECHO; }; pc = cc; }