/* 初始化 */
  void init()
  {
   int i;

  /* 设置单字符符号 */
  for(i=0;i<=255;i++)ssym[i]=nul;
  ssym['+']=plus;
  ssym['-']=minus;
  ssym['*']=times;
  ssym['/']=slash;
  ssym['(']=lparen;
  ssym[')']=rparen;
  ssym['=']=eql;
  ssym[',']=comma;
  ssym['.']=period;
  ssym['#']=neq;
  ssym[';']=semicolon;

  /* 设置保留字名字 */
  strcpy(&(word[0][0]),"begin");
  strcpy(&(word[1][0]),"call");
  strcpy(&(word[2][0]),"const");
  strcpy(&(word[3][0]),"do");
  strcpy(&(word[4][0]),"end");
  strcpy(&(word[5][0]),"if");
  strcpy(&(word[6][0]),"odd");
  strcpy(&(word[7][0]),"procedure");
  strcpy(&(word[8][0]),"read");
  strcpy(&(word[9][0]),"then");
  strcpy(&(word[10][0]),"var");
  strcpy(&(word[11][0]),"while");
  strcpy(&(word[12][0]),"write");

  /* 设置保留字符号 */
  wsym[0]=beginsym;
  wsym[1]=callsym;
  wsym[2]=constsym;
  wsym[3]=dosym;
  wsym[4]=endsym;
  wsym[5]=ifsym;
  wsym[6]=oddsym;
  wsym[7]=procsym;
  wsym[8]=readsym;
  wsym[9]=thensym;
  wsym[10]=varsym;
  wsym[11]=whilesym;
  wsym[12]=writesym;

  /* 设置指令名称 */
  strcpy(&(mnemonic[lit][0]),"lit");
  strcpy(&(mnemonic[opr][0]),"opr");
  strcpy(&(mnemonic[lod][0]),"lod");
  strcpy(&(mnemonic[sto][0]),"sto");
  strcpy(&(mnemonic[cal][0]),"cal");
  strcpy(&(mnemonic[inte][0]),"int");
  strcpy(&(mnemonic[jmp][0]),"jmp");
  strcpy(&(mnemonic[jpc][0]),"jpc");

  /* 设置符号集 */
  for(i=0;i<symnum;i++)
  {
   declbegsys[i]=false;
   statbegsys[i]=false;
   facbegsys[i]=false;
  }

  /* 设置声明开始符号集 */
  declbegsys[constsym]=true;
  declbegsys[varsym]=true;
  declbegsys[procsym]=true;

  /* 设置语句开始符号集 */
  statbegsys[beginsym]=true;
  statbegsys[callsym]=true;
  statbegsys[ifsym]=true;
  statbegsys[whilesym]=true;

  /* 设置因子开始符号集 */
  facbegsys[ident]=true;
  facbegsys[number]=true;
  facbegsys[lparen]=true;
  }