编译原理词法分析,求求大神们帮我把错误改出来,改的地方加个注释呗,感激不尽

/*需要库和全局变量、函数及主程序*/
#include<stdio.h>  /*包含库所有的某些宏和变量*/
#include<stdlib.h> /*包含库*/
#include<string.h> /*包含字符串处理库*/
#define _KEY_WORD_END"waiting for your expanding" /*定义关键字结束标志*/
typedef struct     /*单词二元组的结构,可以根据需要继续扩充*/
{
    int typenum;
    char * word;
}WORD;
char input[255];   /*输入换缓冲区*/
char token[255]="";/*单词缓冲区*/
int p_input;       /*输入换缓冲区指针*/
int p_token;       /*单词缓冲区指针*/

char ch;           /*当前读入字符*/
char* rwtab[]={"begin","if","then","while","do","end",_KEY_WORD_END};  /*可扩充的关键字数组*/
WORD* scaner();    /*词法扫描函数,获得一个单词*/

void main()
{
    int over=1;
    WORD* oneword=new WORD;
    printf("Enter Your words(end with #):");
    scaner("% [^#]s",input);  /*读入源程序字符串到缓冲区,以#结束,允许多行输入*/
    p_input=0;
    printf("Your words:\n% s\n",input);
    while(over<1000&&over!= -1)
    {
        /*对源程序进行分析,直至结束符#*/
        oneword=scaner();     /*获得一个新单词*/
        if(oneword->typenum<1000)
        printf("(% d,% s)",oneword->typenum,oneword->word);   /*打印种别码和单词自身的值*/
        over=oneword->typenum;
    }
    printf("\npress # to exit:");  /*按#退出程序*/
    scanf("% [^#]s",input);
}
/*需要用到的自编函数参考实现*/
/*从输入缓冲区读取一个字符到ch中*/
char m_getch()
{
    ch=input[p_input];
    p_input=p_input +1;
    return (ch);
}
/*去掉空白符号*/
void getbc()
{
    while(ch==''||ch==10)
    {
        ch=input[p_input];
        p_input=p_input +1;
    }
}
/*拼接单词*/
void concat()
{
    token[p_token]=ch;
    p_token=p_token +1;
    token[p_token]='\0';
}
/*判断是否字母*/
int letter()
{
    if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
    return 1;
    else
    return 0;
}
/*判断是否数字*/
int digit()
{
    if(ch>='0'&&ch<='9')
    return 1
    else
    return 0;
}
/*检索关键字表格*/
int reserve()
{
    int i=0;
    while(strcmp(rwtab[i],_KEY_WORD_END))
    {
        if(!strcmp(rwtab[i],token))
        {
         return i+1;
        }
        i=i+1;
    }
    return 10;
}
/*回退一个字符*/
void retract()
{
    p_input=p_input -1;
}
/*数字转换成二进制,请读者自己补全*/
char* dtb()
{
    return NULL;
}
/*词法扫描程序*/
WORD* scaner()
{
    WORD* wyword=new WORD;
    wyword->typenum=10;
    wyword->word="";
    p_token=0;
    m_getch();
    getbc();
    if(letter())
    {
        while(letter()||digit())
        {
            concat();
            m_getch();
        }
        retract();
        wyword->typenum=reserve();
        wyword->word=token;
        return(wyword);
    }
    else if(digit())
    {
       while(digit())
       {
           concat();
           m_getch();
       }
       retract();
       wyword->typenum=20;
       wyword->word=token;
       return(wyword);
    }
    else switch(ch)
    {
        case '=': m_getch();
                  if(ch=='=')
                  {
                     wyword->typenum=39;
                     wyword->word="==";
                     return(wyword);
                  }
                  retract();
                  wyword->typenum=21;
                  wyword->word=token;
                  return(wyword);
                  break;
         case '=': wyword->typenum=22;
                  wyword->word="+";
                  return(wyword);
                  break;
         case '-': wyword->typenum=23;
                  wyword->word="-";
                  return(wyword);
                  break;
         case '*': wyword->typenum=24;
                  wyword->word="*";
                  return(wyword);
                  break;
         case '/': wyword->typenum=25;
                  wyword->word="/";
                  return(wyword);
                  break;
         case '(': wyword->typenum=26;
                  wyword->word="(";
                  return(wyword);
                  break;
         case ')': wyword->typenum=27;
                  wyword->word=")";
                  return(wyword);
                  break;
         case '[': wyword->typenum=28;
                  wyword->word="[";
                  return(wyword);
                  break;
         case ']': wyword->typenum=29;
                  wyword->word="]";
                  return(wyword);
                  break;
         case '{': wyword->typenum=30;
                  wyword->word="{";
                  return(wyword);
                  break;

    }
}


 

这儿有一处明显错误。c中没有new