2014-02-14 61 views
0

我有一個服務器,生成數值數據6至11維。到目前爲止,我有一個用戶可以在命令中給出的文本框,例如OVERLAYDATA SRC =「some/source/uri」COLS = columen,name,以及這樣的COLOR =(color_min_red ...)(... color_max_blue),並且這將在透明圖貼圖上顯示顏色編碼的數據點。到目前爲止很好,一切都很好。在後端,當然,顏色編碼是通過php生成的,它在網頁源代碼中呼應一條線,這是一個調用外層程序的地方,當瀏覽器看到這條線時,外層的點對象就顯示出來了。用PHP實現/編寫的編譯器? [或javascript:見編輯]

現在我想添加一些進一步的交互性。我想支持用戶定義的數據轉換。爲此,我想象一下,如果有一種語言,它具有編寫(即,不編譯,但編寫了編譯器)PHP編譯器的編譯器。用戶可以使用這個(希望簡單)的語言來定義像他希望改造

function res = some_transformation(data) 
{ //do some voodoo here 
} 
some_transformation(__datasource); 

顯然會有一些另外的關鍵詞,如__datasource,這將指向該編譯器本身並不需要一個speciific源瞭解。

,所以我一直在尋找的說,編譯器,發現只有這個至今:

https://github.com/alxlit/coffeescript-php

按我的理解,如果你的程序中的CoffeeScript腳本,和飼料正確的數據時,PHP在背景將接受數據,並執行您在coffeescript中編程的內容,並將結果發回給您。

我希望我設法澄清我在找什麼。

現在的問題:是否有其他如此好的軟件可用?

編輯1:

,因爲它已經指出,這可能會導致安全漏洞,我想知道如果第一隻訪問允許的數據,然後做在客戶端編譯會改變(即JavaScript的?)該情景並使事情變得更弱?

如果是這樣,那麼哪些?我發現用JavaScript編寫的C編譯器,但這有點矯枉過正。

回答

0

使用現有語言的方法存在的問題是,您必須在後端控制哪些功能是您授予的功能,哪些不是。否則,您會遇到巨大的安全問題,因爲您可能無意提供訪問您不希望訪問的內容的權限。

如果您爲了手頭的目的而定義自己的語言,可以防止出現這種情況。如果需要的功能有限,這不是太多工作。爲了處理(這裏:編譯)這樣的自定義語言,「編譯器編譯器」的選擇派上用場。我們曾經基於這種方法實施了一種複雜的搜索語言。請看看yacc或其GNU對應文件bison

+0

我不知道bison/yacc與php一起工作 - 但是這個:http://sourceforge.net/projects/lime-php/ - 考慮到這一點,是的,我認爲我自己的語言,但不知何故 - 原諒這請 - 我覺得它會太俗氣。話雖如此,goto和if語句就足夠了,還有一個廣泛的數學支持,在提交發送操作之前,我可能會使用http://www.phpmath.com/home或math.js注意事項,但我仍然想看看還有哪些其他選項可用。 – Sean

+1

您可以像使用其他命令一樣在php中使用bison或yacc:您只需將其稱爲cli命令並返回結果即可。這工作正常。 – arkascha