C语言词法分析:C#源码

今天继续研究代码解析的算法
这个是算法流程图
C语言词法分析:C#源码

 

有图解可能更直观一点;
以下是c#源码:

  1C语言词法分析:C#源码using System;
  2C语言词法分析:C#源码using System.IO;
  3C语言词法分析:C#源码using System.Text;
  4C语言词法分析:C#源码using System.Windows.Forms;
  5C语言词法分析:C#源码using System.Collections;
  6C语言词法分析:C#源码
  7C语言词法分析:C#源码C语言词法分析:C#源码namespace CodeFormatter C语言词法分析:C#源码{
  8C语言词法分析:C#源码C语言词法分析:C#源码  /**//// <summary>
  9C语言词法分析:C#源码  /// CodeFormatterFactory 的摘要说明。
 10C语言词法分析:C#源码  /// c 代码解析,不支持中文
 11C语言词法分析:C#源码  /// </summary>

 12C语言词法分析:C#源码C语言词法分析:C#源码  public class CodeFormatterFactory C语言词法分析:C#源码{
 13C语言词法分析:C#源码C语言词法分析:C#源码    /**//*源代码*/
 14C语言词法分析:C#源码    private string sourceCode = "";
 15C语言词法分析:C#源码
 16C语言词法分析:C#源码C语言词法分析:C#源码    /**//*C语言所有关键字,共32个*/
 17C语言词法分析:C#源码    ArrayList KeyWordList = new ArrayList();
 18C语言词法分析:C#源码
 19C语言词法分析:C#源码C语言词法分析:C#源码    /**//*运算、限界符*/
 20C语言词法分析:C#源码    ArrayList LimitList = new ArrayList();
 21C语言词法分析:C#源码
 22C语言词法分析:C#源码C语言词法分析:C#源码    /**//*常量表*/
 23C语言词法分析:C#源码    ArrayList ConstList = new ArrayList();
 24C语言词法分析:C#源码
 25C语言词法分析:C#源码C语言词法分析:C#源码    /**//*标识符*/
 26C语言词法分析:C#源码    ArrayList IdentifierList = new ArrayList();
 27C语言词法分析:C#源码
 28C语言词法分析:C#源码C语言词法分析:C#源码    /**//*输出*/
 29C语言词法分析:C#源码    ArrayList OutputList = new ArrayList();
 30C语言词法分析:C#源码
 31C语言词法分析:C#源码C语言词法分析:C#源码    public CodeFormatterFactory() C语言词法分析:C#源码{
 32C语言词法分析:C#源码      //
 33C语言词法分析:C#源码      // TODO: 在此处添加构造函数逻辑
 34C语言词法分析:C#源码      //
 35C语言词法分析:C#源码      init();
 36C语言词法分析:C#源码    }

 37C语言词法分析:C#源码
 38C语言词法分析:C#源码C语言词法分析:C#源码    public string SourceCodeC语言词法分析:C#源码{
 39C语言词法分析:C#源码C语言词法分析:C#源码      getC语言词法分析:C#源码{return this.sourceCode;}
 40C语言词法分析:C#源码C语言词法分析:C#源码      setC语言词法分析:C#源码{this.sourceCode =value;}
 41C语言词法分析:C#源码    }

 42C语言词法分析:C#源码
 43C语言词法分析:C#源码C语言词法分析:C#源码    public string ParseMessagesC语言词法分析:C#源码{
 44C语言词法分析:C#源码C语言词法分析:C#源码      getC语言词法分析:C#源码{
 45C语言词法分析:C#源码        string pm = "";
 46C语言词法分析:C#源码
 47C语言词法分析:C#源码        IEnumerator ie = this.OutputList.GetEnumerator();
 48C语言词法分析:C#源码        while ( ie.MoveNext() )
 49C语言词法分析:C#源码          pm += ie.Current.ToString() + "\r\n";
 50C语言词法分析:C#源码        return pm;
 51C语言词法分析:C#源码      }

 52C语言词法分析:C#源码    }

 53C语言词法分析:C#源码
 54C语言词法分析:C#源码C语言词法分析:C#源码    private void init() C语言词法分析:C#源码{
 55C语言词法分析:C#源码C语言词法分析:C#源码      /**//*C语言所有关键字,共32个*/
 56C语言词法分析:C#源码C语言词法分析:C#源码      string[] key=new string[]C语言词法分析:C#源码{" ","auto","break","case","char","const","continue","default","do","double",
 57C语言词法分析:C#源码                                 "else","enum","extern","float","for","goto","if","int","long","register",
 58C语言词法分析:C#源码                                 "return","short","signed","sizeof","static","struct","switch","typedef",
 59C语言词法分析:C#源码                                 "union","unsigned","void","volatile","while"}
;
 60C语言词法分析:C#源码C语言词法分析:C#源码      /**//*运算、限界符*/
 61C语言词法分析:C#源码C语言词法分析:C#源码      string[] limit=new string[]C语言词法分析:C#源码{" ","(",")","[","]","->",".","!","++","--","&","~",
 62C语言词法分析:C#源码                                   "*","/","%","+","-","<<",">>","<","<=",">",">=","==","!=","&&","||",
 63C语言词法分析:C#源码                                   "=","+=","-=","*=","/=",",",";","{","}","#","_","'"}
;
 64C语言词法分析:C#源码
 65C语言词法分析:C#源码      this.KeyWordList.Clear();
 66C语言词法分析:C#源码      this.KeyWordList.TrimToSize();
 67C语言词法分析:C#源码      for(int i=1;i<key.Length;i++)
 68C语言词法分析:C#源码        this.KeyWordList.Add(key[i]);
 69C语言词法分析:C#源码
 70C语言词法分析:C#源码      this.LimitList.Clear();
 71C语言词法分析:C#源码      this.LimitList.TrimToSize();
 72C语言词法分析:C#源码      for(int i=1;i<limit.Length;i++)
 73C语言词法分析:C#源码        this.LimitList.Add(limit[i]);
 74C语言词法分析:C#源码
 75C语言词法分析:C#源码      this.ConstList.Clear();
 76C语言词法分析:C#源码      this.ConstList.TrimToSize();
 77C语言词法分析:C#源码
 78C语言词法分析:C#源码      this.IdentifierList.Clear();
 79C语言词法分析:C#源码      this.IdentifierList.TrimToSize();
 80C语言词法分析:C#源码
 81C语言词法分析:C#源码      this.OutputList.Clear();
 82C语言词法分析:C#源码      this.OutputList.TrimToSize();
 83C语言词法分析:C#源码    }

 84C语言词法分析:C#源码
 85C语言词法分析:C#源码C语言词法分析:C#源码    /**//*******************************************
 86C语言词法分析:C#源码    * 十进制转二进制函数
 87C语言词法分析:C#源码    *******************************************/

 88C语言词法分析:C#源码C语言词法分析:C#源码    private string dtb(string buf)C语言词法分析:C#源码{
 89C语言词法分析:C#源码      int[] temp= new int[20];
 90C语言词法分析:C#源码      string binary = "";
 91C语言词法分析:C#源码      int val=0,i=0;
 92C语言词法分析:C#源码
 93C语言词法分析:C#源码C语言词法分析:C#源码      /**//*先将字符转化为十进制数*/
 94C语言词法分析:C#源码C语言词法分析:C#源码      tryC语言词法分析:C#源码{
 95C语言词法分析:C#源码        val = Convert.ToInt32(buf);
 96C语言词法分析:C#源码C语言词法分析:C#源码      }
catchC语言词法分析:C#源码{
 97C语言词法分析:C#源码        val = 0;
 98C语言词法分析:C#源码      }

 99C语言词法分析:C#源码
100C语言词法分析:C#源码C语言词法分析:C#源码      if(val==0C语言词法分析:C#源码{
101C语言词法分析:C#源码        return(val.ToString());
102C语言词法分析:C#源码      }

103C语言词法分析:C#源码
104C语言词法分析:C#源码      i=0;
105C语言词法分析:C#源码C语言词法分析:C#源码      while(val!=0C语言词法分析:C#源码{
106C语言词法分析:C#源码        temp[i++]=val%2;
107C语言词法分析:C#源码        val/=2;
108C语言词法分析:C#源码      }

109C语言词法分析:C#源码
110C语言词法分析:C#源码      binary = "";
111C语言词法分析:C#源码      for(int j=0;j<=i-1;j++)
112C语言词法分析:C#源码        binary += (char)(temp[i-j-1]+48);
113C语言词法分析:C#源码
114C语言词法分析:C#源码      return(binary);
115C语言词法分析:C#源码    }

116C语言词法分析:C#源码
117C语言词法分析:C#源码C语言词法分析:C#源码    /**//*******************************************
118C语言词法分析:C#源码    * 根据不同命令查表或造表函数
119C语言词法分析:C#源码    *******************************************/

120C语言词法分析:C#源码C语言词法分析:C#源码    private int find(string buf,int type,int command)C语言词法分析:C#源码{     
121C语言词法分析:C#源码      int number=0;
122C语言词法分析:C#源码      string temp;
123C语言词法分析:C#源码
124C语言词法分析:C#源码      IEnumerator ie = null;
125C语言词法分析:C#源码      ArrayList al = null;
126C语言词法分析:C#源码C语言词法分析:C#源码      switch(type)C语言词法分析:C#源码{
127C语言词法分析:C#源码        case 1://关键字表
128C语言词法分析:C#源码          ie = this.KeyWordList.GetEnumerator();
129C语言词法分析:C#源码          break;
130C语言词法分析:C#源码        case 2://标识符表
131C语言词法分析:C#源码          ie = this.IdentifierList.GetEnumerator();
132C语言词法分析:C#源码          break;
133C语言词法分析:C#源码        case 3://常数表
134C语言词法分析:C#源码          ie = this.ConstList.GetEnumerator();
135C语言词法分析:C#源码          break;
136C语言词法分析:C#源码        case 4://运算、限界符表
137C语言词法分析:C#源码          ie = this.LimitList.GetEnumerator();
138C语言词法分析:C#源码          break;
139C语言词法分析:C#源码      }
            
140C语言词法分析:C#源码
141C语言词法分析:C#源码      if(ie!=null)
142C语言词法分析:C#源码C语言词法分析:C#源码      while (ie.MoveNext())C语言词法分析:C#源码{
143C语言词法分析:C#源码        temp = ie.Current.ToString();
144C语言词法分析:C#源码C语言词法分析:C#源码        if(temp.Trim().ToLower()==buf.Trim().ToLower())C语言词法分析:C#源码{
145C语言词法分析:C#源码          return number;
146C语言词法分析:C#源码        }

147C语言词法分析:C#源码        number ++;
148C语言词法分析:C#源码      }

149C语言词法分析:C#源码      
150C语言词法分析:C#源码C语言词法分析:C#源码      if(command==1)C语言词法分析:C#源码{
151C语言词法分析:C#源码C语言词法分析:C#源码        /**//*找不到,当只需查表,返回0,否则还需造表*/
152C语言词法分析:C#源码        return 0;
153C语言词法分析:C#源码      }

154C语言词法分析:C#源码
155C语言词法分析:C#源码C语言词法分析:C#源码      switch(type)C语言词法分析:C#源码{
156C语言词法分析:C#源码        case 1: al = this.KeyWordList;break;
157C语言词法分析:C#源码        case 2: al = this.IdentifierList;break;
158C语言词法分析:C#源码        case 3: al = this.ConstList;break;
159C语言词法分析:C#源码        case 4: al = this.LimitList;break;
160C语言词法分析:C#源码      }

161C语言词法分析:C#源码      if(al!=null)
162C语言词法分析:C#源码        al.Add(buf);
163C语言词法分析:C#源码
164C语言词法分析:C#源码      return number + 1;
165C语言词法分析:C#源码    }

166C语言词法分析:C#源码C语言词法分析:C#源码    /**//*******************************************
167C语言词法分析:C#源码    * 数字串处理函数
168C语言词法分析:C#源码    *******************************************/

169C语言词法分析:C#源码C语言词法分析:C#源码    private void cs_manage(string buffer)C语言词法分析:C#源码{
170C语言词法分析:C#源码      string binary = dtb(buffer);
171C语言词法分析:C#源码      int result = find(binary,3,2);
172C语言词法分析:C#源码      this.OutputList.Add(String.Format("{0}\t\t\t3\t\t\t{1}",buffer,result));
173C语言词法分析:C#源码    }

174C语言词法分析:C#源码
175C语言词法分析:C#源码C语言词法分析:C#源码    /**//*******************************************
176C语言词法分析:C#源码    * 字符串处理函数 
177C语言词法分析:C#源码    *******************************************/

178C语言词法分析:C#源码C语言词法分析:C#源码    private void ch_manage(string buffer) C语言词法分析:C#源码{
179C语言词法分析:C#源码      int result = find(buffer,1,1);
180C语言词法分析:C#源码C语言词法分析:C#源码      if(result!=0)C语言词法分析:C#源码{
181C语言词法分析:C#源码        this.OutputList.Add(String.Format("{0}\t\t\t1\t\t\t{1}",buffer,result));
182C语言词法分析:C#源码C语言词法分析:C#源码      }
elseC语言词法分析:C#源码{
183C语言词法分析:C#源码        result = find(buffer,2,2);
184C语言词法分析:C#源码        this.OutputList.Add(String.Format("{0}\t\t\t2\t\t\t{1}",buffer,result));
185C语言词法分析:C#源码      }

186C语言词法分析:C#源码    }

187C语言词法分析:C#源码
188C语言词法分析:C#源码C语言词法分析:C#源码    /**//*******************************************
189C语言词法分析:C#源码    * 出错处理函数
190C语言词法分析:C#源码    *******************************************/

191C语言词法分析:C#源码C语言词法分析:C#源码    private void er_manage(char error,int lineno) C语言词法分析:C#源码{
192C语言词法分析:C#源码      this.OutputList.Add(String.Format("错误关键字: {0} ,所在行: {1}",error,lineno));
193C语言词法分析:C#源码    }

194C语言词法分析:C#源码
195C语言词法分析:C#源码C语言词法分析:C#源码    /**//*******************************************
196C语言词法分析:C#源码    * 转换Char数组为string
197C语言词法分析:C#源码    ******************************************/

198C语言词法分析:C#源码C语言词法分析:C#源码    private string joinString(char[] array,int Length)C语言词法分析:C#源码{
199C语言词法分析:C#源码      string s = "";
200C语言词法分析:C#源码      if(array.Length>0)
201C语言词法分析:C#源码C语言词法分析:C#源码        for(int i=0;i<Length;i++)C语言词法分析:C#源码{
202C语言词法分析:C#源码C语言词法分析:C#源码          if(array[i]!='\0'C语言词法分析:C#源码{
203C语言词法分析:C#源码            s+=array[i];
204C语言词法分析:C#源码C语言词法分析:C#源码          }
elseC语言词法分析:C#源码{
205C语言词法分析:C#源码            break;
206C语言词法分析:C#源码          }

207C语言词法分析:C#源码        }

208C语言词法分析:C#源码      return s;
209C语言词法分析:C#源码    }

210C语言词法分析:C#源码
211C语言词法分析:C#源码C语言词法分析:C#源码    private char getchc(ref int n)C语言词法分析:C#源码{
212C语言词法分析:C#源码      char[] c = sourceCode.ToCharArray();
213C语言词法分析:C#源码C语言词法分析:C#源码      if(n<c.Length)C语言词法分析:C#源码{
214C语言词法分析:C#源码        char r = c[n];      
215C语言词法分析:C#源码        n++;
216C语言词法分析:C#源码        return r;
217C语言词法分析:C#源码      }

218C语言词法分析:C#源码      return sourceCode[sourceCode.Length-1];
219C语言词法分析:C#源码    }

220C语言词法分析:C#源码C语言词法分析:C#源码    /**//*******************************************
221C语言词法分析:C#源码    * 扫描程序
222C语言词法分析:C#源码    ********************************************/

223C语言词法分析:C#源码C语言词法分析:C#源码    public void Parse() C语言词法分析:C#源码{
224C语言词法分析:C#源码      //StreamWriter fpout = null;
225C语言词法分析:C#源码      char ch ;
226C语言词法分析:C#源码      int i=0,line=1;
227C语言词法分析:C#源码      int count,result,errorno=0;
228C语言词法分析:C#源码      char[] array = new char[30];
229C语言词法分析:C#源码      string word= "";
230C语言词法分析:C#源码
231C语言词法分析:C#源码C语言词法分析:C#源码      /**//*按字符依次扫描源程序,直至结束*/
232C语言词法分析:C#源码      int n = 0;
233C语言词法分析:C#源码
234C语言词法分析:C#源码C语言词法分析:C#源码      while(n<sourceCode.Length-1)C语言词法分析:C#源码{
235C语言词法分析:C#源码        i = 0;
236C语言词法分析:C#源码        ch = getchc(ref n);
237C语言词法分析:C#源码C语言词法分析:C#源码        /**//*以字母开头*/
238C语言词法分析:C#源码C语言词法分析:C#源码        if(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z'))||(ch=='_')) C语言词法分析:C#源码{                    
239C语言词法分析:C#源码C语言词法分析:C#源码          while(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z'))||(ch=='_')||((ch>='0')&&(ch<='9'))) C语言词法分析:C#源码{
240C语言词法分析:C#源码            array[i++]=ch;
241C语言词法分析:C#源码            ch = getchc(ref n);
242C语言词法分析:C#源码          }

243C语言词法分析:C#源码          array[i++= '\0';
244C语言词法分析:C#源码          word = joinString(array,array.Length);
245C语言词法分析:C#源码          ch_manage(word);
246C语言词法分析:C#源码          if(n<sourceCode.Length)n--;
247C语言词法分析:C#源码C语言词法分析:C#源码        }
else if(ch>='0'&&ch<='9'C语言词法分析:C#源码{
248C语言词法分析:C#源码C语言词法分析:C#源码          /**//*以数字开头*/
249C语言词法分析:C#源码C语言词法分析:C#源码          while(ch>='0'&&ch<='9'C语言词法分析:C#源码{
250C语言词法分析:C#源码            array[i++]=ch;
251C语言词法分析:C#源码            ch = getchc(ref n);
252C语言词法分析:C#源码          }

253C语言词法分析:C#源码          array[i++= '\0';
254C语言词法分析:C#源码          word=joinString(array,array.Length);
255C语言词法分析:C#源码          cs_manage(word);
256C语言词法分析:C#源码          if(n<sourceCode.Length)n--;
257C语言词法分析:C#源码        }

258C语言词法分析:C#源码        else if((ch==' ')||(ch=='\t'))
259C语言词法分析:C#源码C语言词法分析:C#源码          /**//*消除空格符和水平制表符*/
260C语言词法分析:C#源码          ;
261C语言词法分析:C#源码        else if(ch=='\n')
262C语言词法分析:C#源码C语言词法分析:C#源码          /**//*消除回车并记录行数*/
263C语言词法分析:C#源码          line++;
264C语言词法分析:C#源码C语言词法分析:C#源码        else if(ch=='/'C语言词法分析:C#源码{
265C语言词法分析:C#源码C语言词法分析:C#源码          /**//*消除注释*/                          
266C语言词法分析:C#源码          ch = getchc(ref n);
267C语言词法分析:C#源码C语言词法分析:C#源码          if(ch=='='C语言词法分析:C#源码{
268C语言词法分析:C#源码C语言词法分析:C#源码            /**//*判断是否为‘/=’符号*/
269C语言词法分析:C#源码            this.OutputList.Add(String.Format("/=\t\t\t4\t\t\t32"));
270C语言词法分析:C#源码          }

271C语言词法分析:C#源码C语言词法分析:C#源码          else if(ch!='*'C语言词法分析:C#源码{
272C语言词法分析:C#源码C语言词法分析:C#源码            /**//*若为除号,写入输出*/
273C语言词法分析:C#源码            this.OutputList.Add(String.Format("/\t\t\t4\t\t\t13"));
274C语言词法分析:C#源码            n--;
275C语言词法分析:C#源码C语言词法分析:C#源码          }
 else if(ch=='*'C语言词法分析:C#源码{
276C语言词法分析:C#源码C语言词法分析:C#源码            /**//*若为注释的开始,消除包含在里面的所有字符*/
277C语言词法分析:C#源码            count=0;
278C语言词法分析:C#源码            ch = getchc(ref n);
279C语言词法分析:C#源码C语言词法分析:C#源码            while(count!=2C语言词法分析:C#源码{
280C语言词法分析:C#源码C语言词法分析:C#源码              /**//*当扫描到‘*’且紧接着下一个字符为‘/’才是注释的结束*/
281C语言词法分析:C#源码              count=0;
282C语言词法分析:C#源码              while(ch!='*')
283C语言词法分析:C#源码                ch = getchc(ref n);
284C语言词法分析:C#源码              count++;
285C语言词法分析:C#源码              ch = getchc(ref n);
286C语言词法分析:C#源码              if(ch=='/')
287C语言词法分析:C#源码                count++;
288C语言词法分析:C#源码              else
289C语言词法分析:C#源码                ch = getchc(ref n);
290C语言词法分析:C#源码            }

291C语言词法分析:C#源码          }

292C语言词法分析:C#源码        }

293C语言词法分析:C#源码C语言词法分析:C#源码        else if(ch=='"'C语言词法分析:C#源码{
294C语言词法分析:C#源码C语言词法分析:C#源码          /**//*消除包含在双引号中的字符串常量*/
295C语言词法分析:C#源码          this.OutputList.Add(String.Format("{0}\t\t\t4\t\t\t37",ch));
296C语言词法分析:C#源码          while(ch!='"')
297C语言词法分析:C#源码            ch = getchc(ref n);
298C语言词法分析:C#源码          this.OutputList.Add(String.Format("{0}\t\t\t4\t\t\t37",ch));
299C语言词法分析:C#源码        }

300C语言词法分析:C#源码C语言词法分析:C#源码        else C语言词法分析:C#源码{
301C语言词法分析:C#源码C语言词法分析:C#源码          /**//*首字符为其它字符,即运算限界符或非法字符*/
302C语言词法分析:C#源码          array[0]=ch;
303C语言词法分析:C#源码C语言词法分析:C#源码          /**//*再读入下一个字符,判断是否为双字符运算、限界符*/
304C语言词法分析:C#源码          ch = getchc(ref n);
305C语言词法分析:C#源码C语言词法分析:C#源码          /**//*若该字符非结束符*/
306C语言词法分析:C#源码C语言词法分析:C#源码          if(n<sourceCode.Length) C语言词法分析:C#源码{
307C语言词法分析:C#源码            array[1]=ch;
308C语言词法分析:C#源码            array[2= '\0';
309C语言词法分析:C#源码            word = joinString(array,2);
310C语言词法分析:C#源码C语言词法分析:C#源码            result=find(word,4,1); /**//*先检索是否为双字符运算、限界符*/
311C语言词法分析:C#源码C语言词法分析:C#源码            if(result==0C语言词法分析:C#源码{
312C语言词法分析:C#源码C语言词法分析:C#源码              /**//*若不是*/    
313C语言词法分析:C#源码              array[2= '\0';
314C语言词法分析:C#源码              word = joinString(array,1);
315C语言词法分析:C#源码              result=find(word,4,1);      
316C语言词法分析:C#源码C语言词法分析:C#源码              /**//*检索是否为单字符运算、限界符*/
317C语言词法分析:C#源码C语言词法分析:C#源码              if(result==0C语言词法分析:C#源码{
318C语言词法分析:C#源码C语言词法分析:C#源码                /**//*若还不是,则为非法字符*/
319C语言词法分析:C#源码                er_manage(array[0],line);
320C语言词法分析:C#源码                errorno++;
321C语言词法分析:C#源码                n--;
322C语言词法分析:C#源码              }

323C语言词法分析:C#源码C语言词法分析:C#源码              else C语言词法分析:C#源码{
324C语言词法分析:C#源码C语言词法分析:C#源码                /**//*若为单字符运算、限界符,写入输出并将扫描指针回退一个字符*/
325C语言词法分析:C#源码                this.OutputList.Add(String.Format("{0}\t\t\t4\t\t\t{1}\t",word,result));
326C语言词法分析:C#源码                n--;
327C语言词法分析:C#源码              }

328C语言词法分析:C#源码            }

329C语言词法分析:C#源码C语言词法分析:C#源码            else C语言词法分析:C#源码{
330C语言词法分析:C#源码C语言词法分析:C#源码              /**//*若为双字符运算、限界符,写输出*/
331C语言词法分析:C#源码              this.OutputList.Add(String.Format("{0}\t\t\t4\t\t\t{1}",word,result));
332C语言词法分析:C#源码            }

333C语言词法分析:C#源码          }

334C语言词法分析:C#源码C语言词法分析:C#源码          else C语言词法分析:C#源码{
335C语言词法分析:C#源码C语言词法分析:C#源码            /**//*若读入的下一个字符为结束符*/
336C语言词法分析:C#源码            array[2= '\0';
337C语言词法分析:C#源码            word = joinString(array,1);
338C语言词法分析:C#源码C语言词法分析:C#源码            /**//*只考虑是否为单字符运算、限界符*/
339C语言词法分析:C#源码            result=find(word,4,1);
340C语言词法分析:C#源码C语言词法分析:C#源码            /**//*若不是,转出错处理*/
341C语言词法分析:C#源码            if(result==0)
342C语言词法分析:C#源码              er_manage(array[0],line);
343C语言词法分析:C#源码C语言词法分析:C#源码            else C语言词法分析:C#源码{
344C语言词法分析:C#源码C语言词法分析:C#源码              /**//*若是,写输出*/
345C语言词法分析:C#源码              this.OutputList.Add(String.Format("{0}\t\t\t4\t\t\t{1}",word,result));
346C语言词法分析:C#源码            }

347C语言词法分析:C#源码          }

348C语言词法分析:C#源码        }

349C语言词法分析:C#源码        ch = getchc(ref n);
350C语言词法分析:C#源码      }

351C语言词法分析:C#源码C语言词法分析:C#源码      /**//*报告错误字符个数*/
352C语言词法分析:C#源码      this.OutputList.Add(String.Format("\n共有 {0} 个错误.\n",errorno));
353C语言词法分析:C#源码    }

354C语言词法分析:C#源码
355C语言词法分析:C#源码  }

356C语言词法分析:C#源码}

357C语言词法分析:C#源码

 

 

代码可能似曾相识,因为我是参考的一篇C的代码;

这里下载工程源码(带C代码) 
2005年4月22日 S.F.

 

出处:http://www.cnblogs.com/chinasf/archive/2005/04/22/143449.html