語法分析引擎基類

2021-05-08 03:35:49 字數 4588 閱讀 1092

using system;

using system.collections.generic;

using system.drawing;

using system.runtime.interopservices;

using system.text.regularexpressions;

namespace syntaxengineclass

} // 正規表示式

public regexoptions options } // 正規表示式附加選項

public string name } // 名稱

public int index } // 序號

public syntaxitem(string apattern, regexoptions aoptions,

string aname, int aindex)

}///

/// 語法分析返回項

///

public class analyzereslut

}public string block }

public analyzereslut(syntaxitem aitem, string ablock)

}private listfsyntaxitems = new list();

private listfanalyzeresluts = new list();

public listsyntaxitems }

public listanalyzeresluts }

///

/// 進行語法分析

///

/// 所分析的**

/// 返回分析是否成功

public virtual bool analyze(string acode)}}

return true;}}

///

/// c#語法分析引擎

/// zswangy37 wjhu111#21cn.com 2007-03-17 尊重作者,轉貼請註明出處

///

class csharpengine : syntaxengine

|/[|/]|//|/;|/:|/<|/>|/?|/,|/.|//)+",

regexoptions.none, "標點符號", syntaxitems.count));

syntaxitems.add(new syntaxitem(@"^(/d+(?!/.|x|e|d|m)u?)|^0x([/da-f]+(?!/.|x|m)u?)",

regexoptions.ignorecase, "整數", syntaxitems.count));

syntaxitems.add(new syntaxitem(@"^(/d+)?/./d+((/+|/-)?e/d+)?(m|d|f)?|^/d+((/+|/-)?e/d+)?(m|d|f)",

regexoptions.ignorecase, "浮點數", syntaxitems.count));

syntaxitems.add(new syntaxitem(@"^@""(("""")*([^""])*)*""|^""(()*(//"")*(//[a-z])*[^""^//]*)*""",

regexoptions.none, "字串", syntaxitems.count));

syntaxitems.add(new syntaxitem(@"^/'(///')*[^/']*/'", regexoptions.none,

"字元", syntaxitems.count));

syntaxitems.add(new syntaxitem(@"^/w*", regexoptions.none,

"識別符號", syntaxitems.count));}}

///

/// 語法高亮引擎

/// zswangy37 wjhu111#21cn.com 2007-03-17 尊重作者,轉貼請註明出處

///

class syntaxhighlight

} // 前景色

public bool bold } // 是否加粗

public bool italic } // 是否斜體

public bool underline } // 是否下劃線

public highlightitem(color aforecolor, bool abold, bool aitalic, bool aunderline)

}private listfanalyzeresluts;

private font fdefaultfont;

private listfhighlightitems = new list();

public listhighlightitems }

public syntaxhighlight(syntaxengine asyntaxengine, font

adefaultfont)

///

/// 將文字中的rtf元素處理掉

///

/// 輸入的文字

/// 返回處理後的rtf文字

public string texttortf(string atext)

':result += @"/}";

break;

default:

if (vchar > (char)127)

result += @"/u" + ((int)vchar).tostring() + "?";

else result += vchar;

break;}}

return result;

}[dllimport("user32.dll")]

private static extern uint getkbcodepage();

[dllimport("kernel32.dll")]

private static extern ushort getsystemdefaultlangid();

///

/// 將**處理成rtf格式

///

/// 返回處理後的rtf文字

public string makertf()

}/r/n";

result += @"/green/blue;",

vhighlightitem.forecolor.r, vhighlightitem.forecolor.g,

vhighlightitem.forecolor.b);

result += "}/r/n";

result += @"/viewkind4/uc1/pard/f0/fs20" + "/r/n";

bool vbold = false, vitalic = false, vunderline = false;

foreach (syntaxengine.analyzereslut vanalyzereslut in

fanalyzeresluts)

if (vitalic != highlightitems[i].italic)

if (vitalic != highlightitems[i].underline)

result += string.format(@"/cf ", i + 1);

vbold = highlightitems[i].bold;

vitalic = highlightitems[i].italic;

vunderline = highlightitems[i].underline;

result += texttortf(vanalyzereslut.block).replace("/r/n",

"/r/n" + @"/par");

}return result + "}";

}///

/// 將文字中的html元素處理掉

///

/// 輸入的文字

/// 返回處理後的html文字

private string texttohtml(string atext)

}return result;

}///

/// 將顏色處理為html表達的方式

///

/// 輸入的顏色

/// 返回html顏色表示式

private string colortohtml(color acolor)

", acolor.r, acolor.g, acolor.b);

}///

/// 將**處理為html文字

///

/// 返回處理後的html文字

public string makehtml()

if (highlightitems[i].italic)

if (highlightitems[i].underline)

result += vleft + texttohtml(vanalyzereslut.block) + vright;

}return result + "";}}

///

/// c#語法高亮引擎

///

class csharphighlight : syntaxhighlight}}

語法分析 自上而下分析

語法分析 是編譯過程的核心部分。它的任務是在詞法分析識別出單詞符號串的基礎上,分析並判定程式的語法結構是否符合語法規則。語言的語法結構是用上下文無關文法描述的。因此,語法分析器的工作本質上就是按文法的產生式,識別輸入符號串是否為乙個句子。這裡所說的輸入串是指由單詞符號 文法的終結符 組成的有限序列。...

LTP語法分析

詞性標註 part of speech tagging,pos 是給句子中每個詞乙個詞性類別的任務。這裡的詞性類別可能是名詞 動詞 形容詞或其他。採用863詞性標註集 tag description example a adjective 美麗 b other noun modifier 大型,西式...

語法分析總

表示出現一次或0次,表示出現0次或多次,表示是乙個整體 程式aint x 1,y 3 int fun int a return 2 a int main int a 3 printf d n fun a 程式a 就是個翻譯單元 乙個完整的c檔案是乙個翻譯單元 翻譯單元由若干個外部宣告和乙個檔案結束符...