ack/modules/src/em_opt/initlex.c

65 lines
1.1 KiB
C
Raw Normal View History

1987-01-15 18:12:26 +00:00
#ifndef NORCSID
1994-06-24 11:31:16 +00:00
static char rcsidp2[] = "$Id$";
1987-01-15 18:12:26 +00:00
#endif
#include <em_mnem.h>
#include <em_flag.h>
#include <em_spec.h>
#include "parser.h"
#define op_lab sp_fpseu /* if you change this change nopt.h also */
1987-01-15 18:12:26 +00:00
#include <idf_pkg.body>
extern char em_flag[];
extern char em_mnem[][4];
1993-11-10 11:14:28 +00:00
PRIVATE idinit();
1987-01-15 18:12:26 +00:00
initlex()
{
register int i,j;
init_idf();
idinit("lab",op_lab,DEFILB);
for(i=sp_fmnem;i<=sp_lmnem;i++) {
j=i-sp_fmnem;
switch(em_flag[j] & EM_PAR) {
case PAR_NO:
idinit(em_mnem[j],i,NOARG); break;
case PAR_C:
case PAR_D:
case PAR_F:
case PAR_L:
case PAR_N:
case PAR_O:
case PAR_R:
case PAR_S:
case PAR_Z:
idinit(em_mnem[j],i,CST); break;
case PAR_W:
idinit(em_mnem[j],i,CSTOPT); break;
case PAR_P:
idinit(em_mnem[j],i,PNAM); break;
case PAR_B:
idinit(em_mnem[j],i,LAB); break;
case PAR_G:
idinit(em_mnem[j],i,EXT); break;
}
}
}
PRIVATE
idinit(tag,opcode,argfmt)
char *tag;
int opcode;
int argfmt;
{
struct idf *p;
p = str2idf(tag,0);
p->id_nextidf = ops; /* chain into all ops */
ops = p;
p->id_used = 0;
p->id_startpatt = 0;
p->id_opcode = opcode;
p->id_argfmt = argfmt;
}