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檔案是乙個翻譯單元 翻譯單元由若干個外部宣告和乙個檔案結束符...