2010-04-22 45 views
-1

我試圖評估C#代碼,因爲它被輸入,認爲它就好像我正在嘗試編寫一個IDE。解析C#代碼來評估表達式(基本上,實現Intellisense)

所以一個人類型的代碼,我想找出什麼樣的代碼沒有,他只是寫:

String x = ""; 

我想現在就註冊x是一個String類型。現在每當用戶再次輸入x時,我想向他展示他可以用x完成的所有事情,基本上就像Visual Studio Intellisense一樣。

我需要一些詞法分析器或分析器嗎?這會讓它更容易嗎?我聽說VS 2010有一些微軟發佈的功能。有任何想法嗎?

回答

0

您可以使用DLR來幫助解決這個問題。以DLRPad on codeplex爲例

如果在CLR中使用DLR查詢類型比在C#中使用反射更容易。上次我查看(大約9個月前),我認爲intellisense已經使用這種技術實現了,因爲我們將以同樣的方式進行。

+0

你能解釋一下在DLRPad中究竟是什麼,我讀了一下,看起來它大部分都與IRonPython有關,等等。 – halivingston 2010-04-22 04:14:33

0

如果可以的話,我會避免試圖自己寫這個。 SharpDevelop是一個開放源代碼的.NET IDE,它具有類似於Intellisense的功能。我相信你可以將他們的編輯器嵌入到你自己的項目中。根據維基百科,許可證是LGPL,因此您甚至可以在封閉源代碼項目中使用它。當然,在這樣做之前,你應該自己覈實一下。

Actipro SyntaxEditor是您可以購買的第三方控制。有WinForms和WPF版本的控件。它對我們運作良好。它目前不支持帶有LINQ和lambda表達式的Intellisense。我不知道SharpDevelop是否支持這個。

+0

好吧,這個想法真的不是智能感知,而是別的。我用這個詞來說明問題。我真的需要能夠獲取一行代碼並找出返回類型等細節,基本上評估表達式。 現在這個表達式可以依賴於之前聲明的變量,但就是這樣,它和構建符號表一樣複雜,然後還有一些東西。老實說,雖然.NET 4.0有一些基礎設施讓我這樣做。 – halivingston 2010-04-22 04:36:58

0

我不認爲.NET 4有任何幫助。你可以看看Mono REPL。如果你提供更多關於你真正想要做什麼的細節,這也可能會有所幫助。

+0

目的是評估類型的表達式,以及其他詳細信息,如實例或靜態。例如, String x = String.Empty; 現在x是一種字符串,是一個實例變量,所以我想顯示與實例相關的操作。現在看來我試圖實現智能感知,並且大部分是,但不是以相同的UI,不同的方式來幫助代碼搜索。 我已經得到了大部分微不足道的東西的工作,問題來了這樣的事情: x.ToString()。ToUpper()//開始變得複雜。 因此,詞法分析器/解析器可能對此有所幫助。 – halivingston 2010-04-22 05:00:22

+0

@halivingston我還是不太明白你想做什麼。應用程序的用戶將使用代碼做什麼?他們是否正在編輯和運行它?或者這是探索現有代碼的一種方式嗎?它與搜索代碼庫有關嗎?這是一個重構代碼的工具嗎? – 2010-04-22 05:26:26