2011-08-09 87 views
4

我正在尋找一個函數(也許有一個在.Net框架中),我可以用它來驗證C#語法。它也可以是一個帶有內置驗證的c#解析器。驗證C#語法與C#

背景:我正在構建一個小代碼生成器,用戶可以在其中輸入一些定義並獲取完整的實現屬性等,但我想檢查用戶是否輸入了正確的C#,並且結果是否正確。

編輯:

不想編譯的代碼,它可能是uncomplete代碼。這樣,例如,用戶可以從他的代碼輸入一個代碼片斷帶班,我不知道,我只是想驗證語法,而不是「內容」

例子

輸入:

Car car = new Car(); 
car.drive("50"); 

輸出:

Same as input, because it's valid and nothing to do. 

輸入:

Car car = new Car() 
car.drive("50"); 

輸出:

Message that it is not valid, beause of missing ';' 

我不知道類Car,所以我不能編譯它,我只是想檢查語法。

+0

C#已經有一個自己的內置編譯器,它必須驗證它編譯的代碼 –

+0

是的,我知道,但我想檢查正在運行的c#程序的語法(代碼只是在TextBox),它不會被我的程序編譯 – Tokk

+0

快速嘗試編譯代碼有什麼缺點?沒有其他「真實」的方式來確定它是否完全有效。除非你嘗試編譯它,否則你不會知道 –

回答

4

如何使用C#編譯器編譯編程代碼:

http://support.microsoft.com/kb/304655

..它驗證作爲編譯過程的一部分。你可以得到這樣的錯誤列表(來自文章..令人驚訝的,因爲它是一個有點亂):

foreach(CompilerError CompErr in results.Errors) 
{ 
textBox2.Text = textBox2.Text + 
    "Line number " + CompErr.Line + 
    ", Error Number: " + CompErr.ErrorNumber + 
    ", '" + CompErr.ErrorText + ";" + 
    Environment.NewLine + Environment.NewLine; 
} 
2

看一看這個.NET類,http://msdn.microsoft.com/en-us/library/system.codedom.compiler.codedomprovider.aspx

基本上你可以調用的代碼編譯器你在看和接收回產生的任何錯誤消息。

編輯:如果代碼可能無法編譯多數民衆贊成,你可以看看返回的錯誤信息,並忽略像'未定義'錯誤的東西。

你是唯一的選擇我認爲它可以編寫一個與C#語言規範相匹配的RegEx。

+0

只是一個評論,我期望這樣的RegEx是幾千字節長,而不是完全/正確驗證:) –