initlex.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #ifndef NORCSID
  2. static char rcsidp2[] = "$Id$";
  3. #endif
  4. #include <em_mnem.h>
  5. #include <em_flag.h>
  6. #include <em_spec.h>
  7. #include "parser.h"
  8. #define op_lab sp_fpseu /* if you change this change nopt.h also */
  9. #include <idf_pkg.body>
  10. extern char em_flag[];
  11. extern char em_mnem[][4];
  12. PRIVATE idinit();
  13. initlex()
  14. {
  15. register int i,j;
  16. init_idf();
  17. idinit("lab",op_lab,DEFILB);
  18. for(i=sp_fmnem;i<=sp_lmnem;i++) {
  19. j=i-sp_fmnem;
  20. switch(em_flag[j] & EM_PAR) {
  21. case PAR_NO:
  22. idinit(em_mnem[j],i,NOARG); break;
  23. case PAR_C:
  24. case PAR_D:
  25. case PAR_F:
  26. case PAR_L:
  27. case PAR_N:
  28. case PAR_O:
  29. case PAR_R:
  30. case PAR_S:
  31. case PAR_Z:
  32. idinit(em_mnem[j],i,CST); break;
  33. case PAR_W:
  34. idinit(em_mnem[j],i,CSTOPT); break;
  35. case PAR_P:
  36. idinit(em_mnem[j],i,PNAM); break;
  37. case PAR_B:
  38. idinit(em_mnem[j],i,LAB); break;
  39. case PAR_G:
  40. idinit(em_mnem[j],i,EXT); break;
  41. }
  42. }
  43. }
  44. PRIVATE
  45. idinit(tag,opcode,argfmt)
  46. char *tag;
  47. int opcode;
  48. int argfmt;
  49. {
  50. struct idf *p;
  51. p = str2idf(tag,0);
  52. p->id_nextidf = ops; /* chain into all ops */
  53. ops = p;
  54. p->id_used = 0;
  55. p->id_startpatt = 0;
  56. p->id_opcode = opcode;
  57. p->id_argfmt = argfmt;
  58. }