rules


  ^\%"class "{name} {
          printf("\n\n\n%%{\n#define CLASS %s\n%%}\n",yytext+7);
          printf("\n\n\n%%{\n#define NAME %s\n%%}\n",yytext+7);
          //printf("\n\n\n%%{\n#define lex_scanner %s_scanner\n%%}\n",yytext+7);
          }
  ^"%lex "{name} {
          printf("\n\n\n%%{\n#define CLASS %s\n%%}\n",yytext+7);
          printf("\n\n\n%%{\n#define NAME %s\n%%}\n",yytext+5);
          //printf("\n\n\n%%{\n#define lex_scanner %s_lex__scanner\n%%}\n",yytext+5);
          }
  ^"%yacc "{name} {
          printf("\n\n\n%%{\n#define NAME %s\n%%}\n",yytext+6);
          }
  ^"%nodef".* { _op = 1; _prec = 1; _expr = 1; }
  ^"%defau".* { _defaults; _op = 1; printop(); }
  ^"%op".* { _op = 1; printop(); }
  ^"%noop".* { _op = 1; }
  ^"%prec".* { _prec = 1; printprec(); }
  ^"%noprec".* { _prec = 1; }
  ^"%expr".* { _expr = 1; printexpr(); }
  ^"%noexpr".* { _expr = 1; }
  ^\%\%.*   {
            if (!gg) {
                  if (_op && !_prec) printprec();
                   printf("\n  
%");

if (_op && !_expr) printexpr(); gg++; } else if (gg==1) { if (yyleng==2) // || (yyleng > 2 && yytext[3]=='<')) printf("\n
%");

} }

slide: rules