The DejaVU Framework -- hush 3.0
[.] Papers Tutorials Examples Manuals Interfaces Sources Packages Resources ?

scanner: ooyacc.l hush-3.1/grammar/filters


[.] - [up] [top] - index README text make grammar configure slides talks
  
  

ooyacc


  int cctest = 0;
  char *name="NAME";
  char *super="yacc_parser";
  char namebuf[BUFSIZ];
  int fc=0;
  int sep=0;
  int cl=0;
  
  

slide: ooyacc


rules


  
  \%\{|\%\} ;
  
  ^"#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" { ;}
  
  

slide: rules


auxiliary


  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");
  }
  

slide: auxiliary

  

[.] Papers Tutorials Examples Manuals Interfaces Sources Packages Resources ?
Hush Online Technology
hush@cs.vu.nl
11/03/98