完整的VB.NET的语法解析程序

完整的VB.NET的语法解析程序
using  System;
using  System.Text;
using  System.Text.RegularExpressions;

namespace  Com.OSLeague.Component
{
    
/// <summary>
    
/// 语法分析器,将所有Code根据语法进行变色
    
/// <list type="VB">支持VB.NET</list>
    
/// <list type="CS">支持CS</list>
    
/// <author>掉掉</author>
    
/// <date>2002年5月14日</date>
    
/// <Memo>
    
/// 练习正则表达式
    
/// </Memo>
    
/// </summary>

    public class CodeAnalysis
    
{

        
//
        
//定义HTML开始和结束的语句,用于语法变色
        
//

        
const string TAG_FNTRED    = @"<font color=""red"">";
        
const string TAG_FNTBLUE   = @"<font color=""blue"">" ;
        
const string TAG_FNTGRN    = @"<font color=""green"">" ;
        
const string TAG_FNTMRN    = @"<font color=""maroon"">" ;
        
const string TAG_FNTBLACK  = @"<font color=""black"">" ;
        
const string TAG_EFONT     = @"</font>" ;
        
const string TAG_SPNYELLOW = @"<span style=""background-color: yellow;"">";
        
const string TAG_ESPAN     = @"</span>";
        
const string TAG_B         = @"<b>";
        
const string TAG_EB        = @"</b>";
        
const string TAG_COMMENT   = @"<font colr=#008200>";
        
const string TAG_ECOMMENT   = @"</font>";

        
//



        
public CodeAnalysis()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


    
        
        
/// <summary>
        
/// 处理VB.NET代码,彩色化..
        
/// </summary>
        
/// <param name="Code">传入的Code</param>
        
/// <returns>处理过后的代码</returns>

        public string ParseVB(string Code)
        
{
            
//
            
//定义VB.NET中关键字,将其存为数组
            
//

            
string[] VB_Keyword = new string[]
            
{
                
"AddHandler","AddressOf","AndAlso","Alias","And","Ansi","As","Assembly","Auto","Boolean",
                
"ByRef","Byte","ByVal","Call","Case","Catch","CBool","CByte","CChar",
                
"CDate","CDec","CDbl","Char","CInt","Class","CLng","CObj","Const",
                
"CShort","CSng","CStr","CType","Date","Decimal","Declare","Default",
                
"Delegate","Dim","DirectCast","Do","Double","Each","Else","ElseIf","End",
                
"Enum","Erase","Error","Event","Exit","False",
                
"Finally","For","Friend","Function","Get","GetType","GoTo","Handles","If",
                
"Implements","Imports","In","Inherits","Integer","Interface",
                
"Is","Let","Lib","Like","Long","Loop","Me","Mod","Module",
                
"MustInherit","MustOverride","MyBase","MyClass","Namespace","New","Next","Not","Nothing",
                
"NotInheritable","NotOverridable","Object","On","Option","Optional","Or","OrElse",
                
"Overloads","Overridable","Overrides","ParamArray","Preserve","Private","Property","Protected","Public",
                
"RaiseEvent","ReadOnly","ReDim","RemoveHandler","Resume","Return",
                
"Select","Set","Shadows","Shared","Short","Single","Static","Step","Stop",
                
"String","Structure","Sub","SyncLock","Then","Throw",
                
"To","True","Try","TypeOf","Unicode","Until","Variant","When","While",
                
"With","WithEvents","WriteOnly","Xor"
            }
;

            

            
//
            
//设定转换代码颜色
            
//

            
string ReplaceVBComment = TAG_COMMENT + "$1" + TAG_ECOMMENT;
            
string ReplaceVBKeyword = TAG_FNTBLUE + "${char}" + TAG_EFONT;
            
//开始转换
            for (int i=0;i<VB_Keyword.Length;i++)
            
{
                
string TempDirectives = @"(?<char>(s" + VB_Keyword[i] + "|" + VB_Keyword[i] + @"s))";
                Code 
= Regex.Replace(Code,TempDirectives,ReplaceVBKeyword,RegexOptions.IgnoreCase);
                Code 
= Regex.Replace(Code,@"'(?<x>[^ ]*)",ReplaceVBComment);
                Code 
= Regex.Replace(Code,@"REM (?<x>[^ ]*)",ReplaceVBComment);
            }

            
return Code;    
        }

    }

}

 

学学编译原理里的句法分析可能会有帮助  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值