2009-04-23 22 views
1

我想從一個字符串解析動態功能,例如:動態解析函數形式串

char* func = "app.exe /path:\"@FileExists('filepath', @FileDelete('filepath'), @MsgBox('file not found','error',1))\"; 

我想分析

@FileExists('filepath', @FileDelete('filepath'), @MsgBox('file not found','error',1)) 

我怎樣才能做到這一點?

+0

「解析」是什麼意思?這一切結束後你想結束什麼?一個解析樹?令牌列表?你想基於這個來執行一些東西嗎? – 2009-04-23 16:16:08

+0

是的,我想從文本中提取功能並執行 – Moudey 2009-04-23 16:38:52

回答

4

C++沒有動態函數的概念。如果您正在尋找某種函數,它將接收一個字符串並將其作爲C++代碼執行,那麼您運氣不佳。

3

我假設你正在執行字符串中的代碼。在C++中,一旦編譯了程序,就不會記錄函數或變量的名稱。這只是地址。

可以將您自己的字符串映射設置爲函數。然後你必須建立一個函數/名稱和參數樹並手動調用函數。從本質上講,你必須爲C++的一些子集編寫一個解釋器,並提供一組預定義的可用函數。這絕對不是初學者的任務,但如果你真的想,那麼看看Recursive-Descent parsing。這是開始編寫口譯員最簡單的方法。如果您的需求超出的是,看看一些更強大的解析器像ANTLRflex/bison

有可能在C中嵌入更多的動態腳本語言++。事實上,大多數腳本語言都有某種C接口,並且你可以在C中做任何事情,你可以用C++來完成。看看類似於Boost.Pythonthis example的VBScript。

4

由於喬希已經表示,使用一些動態腳本語言可能是最好的主意。 你應該看看Lua,它很容易嵌入,很小並且在MIT許可下可用。