完整的VB.NET的语法解析程序 [ English ]2008-2-24 1:52:22 中国学网 跟贴 0 条 网友投稿
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>[^/r/n]*)",ReplaceVBComment); Code = Regex.Replace(Code,@"REM (?<x>[^/r/n]*)",ReplaceVBComment); } return Code; } } } 转帖于 Xue163.com_VB.NET |
|