55 lines
1.8 KiB
Plaintext
55 lines
1.8 KiB
Plaintext
|
|
This is the source of the BSD version of yacc that is distributed in the NET2
|
|
release of BSD Unix. We chose this over Bison due to the bison license
|
|
agreement. And if you are scratching you head over that comment, read the
|
|
addendum in the xxx-info-1 file that comes with bison.
|
|
|
|
Anyway, this BSD-yacc has been hacked on to make it generate an all-static
|
|
parser C program so that it may be used on an IOC w/o getting things confused.
|
|
They way we intend to use it is with the epics-hacked version of flex that
|
|
also generates an all-static source program. The general idea is that
|
|
your yacc source (xxx.y) file could be formatted like this:
|
|
|
|
=========================================================
|
|
|
|
%%
|
|
YOUR YACC PROGRAM
|
|
%%
|
|
|
|
int MyYaccParser(char *f1)
|
|
{
|
|
static int FirstFlag = 1;
|
|
|
|
printf("processing file >%s<\n", f1);
|
|
|
|
yyin = fopen(f1, "r");
|
|
if (!FirstFlag) yyrestart(yyin);
|
|
FirstFlag = 0;
|
|
yyparse();
|
|
fclose(yyin);
|
|
|
|
return(0);
|
|
}
|
|
|
|
static int yyerror(char *str)
|
|
{
|
|
printf("Error: %s\n", str);
|
|
return(0);
|
|
}
|
|
=========================================================
|
|
|
|
The FirstFlag and yyrestart jazz is the flex-flavored version of how you
|
|
restart the scanner if you want to parse another file. Without it, the
|
|
scanner can only be used one time. Even if you think your code will only
|
|
be used one time, it is desireable to put in the restart stuff anyway,
|
|
because some day you (or your boss) will change your mind and without it
|
|
the IOC will crash when you make your second call to your parser.
|
|
|
|
Note also that there is a yyerror function present. This is mandatory for the
|
|
way we are using flex. Without, results are indeterminate... because you will
|
|
end up calling some other random yyerror() in the ioc.. probably the one for
|
|
the console command interpreter.
|
|
|
|
|
|
--John
|