int cctest = 0; char *name="NAME"; char *super="yacc_parser"; char namebuf[BUFSIZ]; int fc=0; int sep=0; int cl=0;
\%\{|\%\} ; ^"#ifdef __cplusplus" { if (!cctest) { printf("// %s ",yytext); cl = 15; cctest = 1; } else ECHO; } ^"YYSTYPE *yypv;" { if (cctest) { printf("// *s", yytext); cl = 5; } } ^"typedef struct"\n"#ifdef __cplusplus" { if (cctest) { cl = 3; printf("// yytoktype *** "); } else ECHO; } ^"# line".*/n {;} ^"#define YYACCEPT".* printf("#define YYACCEPT { free(yys); free(yyv); return 0; /* return YYSTYPE(0); */ }"); ^"#define YYABORT".* printf("#define YYABORT { free(yys); free(yyv); return 0; }"); ^"// file " printf("#line 1 "); ^\%"class ".* { strcpy(namebuf,yytext+7); name = namebuf; } ^[ \t]"#" printf("#"); \n { if (cl) { cl--; printf("\n// "); } else ECHO; } "xxyylex()" printf(" (int) ( YYPARSE yylex->operator()() )"); ^"int yy_yys".* { printf("static int yy_yys[YYMAXDEPTH];\n"); printf("static int *yys = yy_yys;\n"); } ^"YYSTYPE yy_yyv".* { printf("static YYSTYPE yy_yyv[YYMAXDEPTH];\n"); printf("static YYSTYPE *yyv = yy_yyv;\n"); } ^"yytabelem" { if (cctest) printf("static %s",yytext); else ECHO; } ^"YYSTYPE yylval" { printf("// %s",yytext); } ^"YYSTYPE yyval" { printf("// %s",yytext); } ^"extern char *ma".*\n { printf("extern \"C\" { extern char *malloc(int), *realloc(char*,int); }\n"); printf("extern \"C\" { extern void free(void*); }\n"); } ^"static int yydebug;".* printf("// %s",yytext); ^"#line "[0-9]+" \"/usr/lib/yaccpar\"" printf("// %s",yytext + 1); ^"#"[ ]*"line".* printf("// %s",yytext + 1); ^"extern int yychar;" printf("// %s",yytext); ^"extern int yyerrflag;" printf("// %s",yytext); ^"#define YYSTYPE int" { printf("#define YYSTYPE term"); /*cl = 2; printf("// %s",yytext);*/ } ^"YYSTYPE yylval, yyval;" printf("// %s",yytext); ^"int yy"[A-Za-z0-9]*"[]" printf("static %s", yytext); ^"typedef struct { ch" printf("// %s",yytext); ^"yytoktype yytoks[]" printf("static %s", yytext); ^"char * yyreds[]" printf("static %s", yytext); ^"int yydebug;" printf("// %s", yytext); ^"static YYSTYPE *yyv;" { cl = 12; printf("// %s",yytext); } ^"int yynerrs;" { cl = 4; printf("// %s",yytext); } ^"int yycvtok(int i)" { printf("inline int parser::yycvtok(int i)"); } ^"int"\n"yyparse()" { incyacc(); printf("term* %s::operator()()",name); } ^"int yyparse()" { incyacc(); printf("term* %s::operator()()",name); } ^"int yyparse(void)" { incyacc(); printf("term* %s::operator()()",name); } ^"#define YYDEBUG 1" { ;}
incyacc() { /*printf("\nextern \"C\" int printf(char*,...);\n");*/ printf("\n#ifndef YYPARSE\n#define YYPARSE\n#endif\n"); printf("\n#ifndef NAME\n#define NAME yacc\n#endif\n"); printf("\n#ifndef YYRTYPE\n#define YYRTYPE int\n#endif\n"); }
Hush Online Technology
hush@cs.vu.nl
11/03/98 |
![]() |
![]() |