使用正则表达式实现语法分析,讨论与完善
昨天有人问怎么用RichTextBox做语法高亮 
 这就需要用到语法分析 
 还有很多论坛里也支持语法高亮的功能、代码折叠的功能 
 这也算是一个常用的功能 
 所以就随手搭建一个语法分析的框架 
 思路是利用正则表达式逐步取得各种语法构成部分   
 这里欢迎大家测试、找BUG、完善正则表达式 
 谢谢参与     
 初步代码如下: 
 ///    <summary>  
 ///   语法分析引擎基类 
 ///    </summary>  
 class   SyntaxEngine 
 { 
             ///    <summary>  
             ///   语法项 
             ///    </summary>  
             public   class   SyntaxItem 
             { 
                         #region   私有字段 
                         private   string   FPattern;   //   正则表达式 
                         private   RegexOptions   FOptions;   //   正则表达式附加选项 
                         private   string   FName;   //   语法名称 
                         private   int   FIndex;   //   序号 
                         #endregion   私有字段   
                         #region   公有属性 
                         public   string   Pattern   {   get   {   return   FPattern;   }   }   //   正则表达式 
                         public   RegexOptions   Options   {   get   {   return   FOptions;   }   }   //   正则表达式附加选项 
                         public   string   Name   {   get   {   return   FName;   }   }   //   名称 
                         public   int   Index   {   get   {   return   FIndex;   }   }   //   序号 
                         #endregion   公有属性   
                         public   SyntaxItem(string   APattern,   RegexOptions   AOptions,    
                                     string   AName,   int   AIndex) 
                         { 
                                     FPattern   =   APattern; 
                                     FOptions   =   AOptions; 
                                     FName   =   AName; 
                                     FIndex   =   AIndex; 
                         } 
             } 
             ///    <summary>  
             ///   语法分析返回项 
             ///    </summary>  
             public   class   AnalyzeReslut    
             { 
                         #region   私有字段 
                         private   SyntaxItem   FItem;   //   所属语法项 
                         private   string   FBlock;   //   文字块