[英]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.