簡體   English   中英

如何通過語句符號/“標記”將方法主體中的代碼分解為語句

[英]how to break up the code in a method body into statement by statement symbols/“tokens”

我正在寫一些東西來檢查一個函數並用另一種語言重寫該函數,因此基本上,如果在函數F1中,我有這行代碼var x = ab(1) ,我該如何將函數主體分解為符號或“令牌”?

我到處搜索,認為System.Reflection.MethodInfo.GetMethodBody中的內容可以解決問題,但是該類似乎沒有能力執行我想要的操作。

我們還有什么其他解決方案?

編輯:無論如何,我們可以使用反射獲得方法的“方法體”嗎? (如字符串等)

編輯2:基本上我想做的是用c#/ vb編寫一個程序,當我按F5鍵時, 一個序列化函數將(使用反射並)將整個程序(該程序中的所有類)並序列化為單個javascript文件。 當然javascript沒有.net庫,因此基本上,C#/ VB程序會將其類的使用限制為.js庫(這是用c#/ vb編寫的用於模擬javascript對象框架的庫)。

好處是我在編碼javascript類時具有類型安全性,還有許多其他好處,例如使用重載和具有class / etc。 由於javascript沒有本地的類/重載功能,因此它依賴於hack來完成。 因此,基本上,序列化函數會根據我的C#/ VB程序輸入編寫javascript(以及所有的技巧和可能的優化)。

我正在嘗試編碼此序列化函數

聽起來您想要一棵解析樹,而反射不會給您。 看一下NRefactory ,它是VB和C#解析器。

如果要這樣做,最好的方法是使用解析器/詞法分析器(例如Gardens Point Parser Generator ,flex / bison或ANTLR)解析C#/ VB代碼。 然后在令牌級別上,使用適當的javascript語法進行重組。 有一些C#和Java。

有關分析和轉換源代碼 ,請參見此答案;有關編程語言之間的 轉換,請參見此答案。

這些假定您使用常規的編譯器方法將文本分為令牌(“詞法”)並將相關令牌分組為程序結構(“解析”)。 如果您分析的內容不那么瑣碎,那么您將需要所有機器,否則它將不可靠。

反思只能給您語言設計師決定給您的東西。 它們始終不會為您提供內部函數的詳細信息。

如果要從IL轉到其他語言,則比先解析源語言要容易。 如果您想走這條路,請考慮閱讀Microsoft的“ Volta”項目(IL-> JavaScript),盡管該項目不再可用,但仍有許多老博客討論有關此問題。

請注意,僅反射是不夠的-反射為您提供了任何特定方法的主體的字節數組(MethodInfo.GetMethodBody.GetILAsByteArray- http://msdn.microsoft.com/zh-cn/library/system.reflection.methodbody.aspx ),您必須閱讀它。 有幾個公開可用的“ IL閱讀器”庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM