reject.c 1000 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <stdio.h>
  4. extern FILE* yyout;
  5. extern FILE* yyin;
  6. extern int yyprevious, *yyfnd;
  7. extern char yyextra[];
  8. extern char yytext[];
  9. extern int yyleng;
  10. extern
  11. struct
  12. {
  13. int *yyaa, *yybb;
  14. int *yystops;
  15. } *yylstate [], **yylsp, **yyolsp;
  16. int yyback(int *p, int m);
  17. int yyinput(void);
  18. void yyoutput(int c);
  19. void yyunput(int c);
  20. int
  21. yyracc(int m)
  22. {
  23. yyolsp = yylsp;
  24. if(yyextra[m]) {
  25. while(yyback((*yylsp)->yystops, -m) != 1 && yylsp > yylstate) {
  26. yylsp--;
  27. yyunput(yytext[--yyleng]);
  28. }
  29. }
  30. yyprevious = yytext[yyleng-1];
  31. yytext[yyleng] = 0;
  32. return m;
  33. }
  34. int
  35. yyreject(void)
  36. {
  37. for(; yylsp < yyolsp; yylsp++)
  38. yytext[yyleng++] = yyinput();
  39. if(*yyfnd > 0)
  40. return yyracc(*yyfnd++);
  41. while(yylsp-- > yylstate) {
  42. yyunput(yytext[yyleng-1]);
  43. yytext[--yyleng] = 0;
  44. if(*yylsp != 0 && (yyfnd = (*yylsp)->yystops) && *yyfnd > 0)
  45. return yyracc(*yyfnd++);
  46. }
  47. if(yytext[0] == 0)
  48. return 0;
  49. yyoutput(yyprevious = yyinput());
  50. yyleng = 0;
  51. return -1;
  52. }