Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

156 lines
2.4 KiB

#include <stdio.h>
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;
}