scan.l 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. %{
  2. /*
  3. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
  4. * See the copyright notice in the ACK home directory, in the file "Copyright".
  5. *
  6. * Author: Hans van Staveren
  7. */
  8. %}
  9. %option nounput
  10. %option noinput
  11. %%
  12. \"[^"]*\" { strncpy(patid,yytext,sizeof(patid)); return(STRING); }
  13. notreg return(NOTREG);
  14. sfit return(SFIT);
  15. ufit return(UFIT);
  16. rotate return(ROTATE);
  17. p return(PSIZE);
  18. w return(WSIZE);
  19. defined return(DEFINED);
  20. samesign return(SAMESIGN);
  21. rom return(ROM);
  22. [a-zA-Z]{3} {
  23. int m;
  24. m = mlookup(yytext);
  25. if (m==0) {
  26. yyless(1);
  27. return yytext[0];
  28. } else {
  29. yylval.y_int = m;
  30. return(MNEM);
  31. }
  32. }
  33. "&&" return(AND2);
  34. "||" return(OR2);
  35. "&" return(AND1);
  36. "|" return(OR1);
  37. "^" return(XOR1);
  38. "+" return(ARPLUS);
  39. "-" return(ARMINUS);
  40. "*" return(ARTIMES);
  41. "/" return(ARDIVIDE);
  42. "%" return(ARMOD);
  43. "==" return(CMPEQ);
  44. "!=" return(CMPNE);
  45. "<" return(CMPLT);
  46. "<=" return(CMPLE);
  47. ">" return(CMPGT);
  48. ">=" return(CMPGE);
  49. "!" return(NOT);
  50. "~" return(COMP);
  51. "<<" return(LSHIFT);
  52. ">>" return(RSHIFT);
  53. [0-9]+ { long l= atol(yytext);
  54. if (l>32767) yyerror("Number too big");
  55. yylval.y_int= (int) l;
  56. return(NUMBER);
  57. }
  58. [ \t] ;
  59. . return(yytext[0]);
  60. \n { lino++; return(yytext[0]); }
  61. :[ \t]*\n[ \t]+ { lino++; return(':'); }
  62. ^"# "[0-9]+.*\n { lino=atoi(yytext+2); }
  63. ^\#.*\n { lino++; }