小議:將script 轉換成 Java

來源:互聯網
上載者:User

  一位前同事提到了將PHP轉換成Java的設想。//2009-7-18
  我對PHP不瞭解。至於“如何將script 轉換成Java”,下面是我的一孔之見。

  目標:將script 語言轉換成Java(script泛指Ruby或JavaScript等“輕量級語言”, 暫不考慮其運行環境).
  步驟:
   1. 編寫script的文法描述(產生式集).

 

   2. 將文法描述解析成文法圖(即所謂的抽象文法樹),樹的結點類型同源碼中的結構成份一一對應,如:Function, VariableDefine, IfElse, For, While, Return, ParameterList, CodeBlock, Expresssion等等。——它表明了源碼的文法結構。

 

   3. 用抽象文法樹來匹配一段script執行個體(A),產生一個匹配樹(我稱之為匹配樹),匹配樹的結點類型同文法樹類似。匹配樹有嚴格的樹結構——它所含的結點與A執行個體中的成份是一一對應的。
     這一個過程具體上是這樣做的:
      3.1 產生一個類,專門用來讀取script。
      3.2 運行這個類,傳入script執行個體(A),成功運行後將產生一個匹配樹。
      3.3 實際上,對所產生的匹配樹需要做一些標準化處理以方便此後的語義分析。比如:將其中的每一隻運算式子樹化為一隻二叉樹(以方便此後的算符優先順序分析和求值)。

 

   4. 接下來做的是,針對每一類結點構造相應的語義結點。一個語義結點執行個體負責通過與其對應的匹配樹的結點來對相應的原始碼成分做語義上的分析或翻譯。

   注意:文法圖和匹配樹在概念上既相關聯又有差別。   

   一些經驗表明,1~3步會耗去大部分時間、調試也會耗去大部分時間。若使用javaCC(或者使用我的javaCCe),則會省去大部分時間。
  這以上過程中可能會遇到這些問題:
   1. Java不支援函數或屬性的動態增減。
   2. script內建對象或native方法(如果有的話)及其各函數的Java化。因為內建對象和native方法沒有源碼,因此不能翻譯,只能模仿,這需要很大的工作量。
   3. script可能有內建的正則語言,若要把它化為Java的正則語言(參見java.util.regex.Pattern),可能會很有難度。
   4. 對錶達式的求值。 運算式幾乎可包含所有的文法成分(比如class)。
   5. ……
 對具有嚴謹文法結構的語言進行語義分析,理論上似乎沒有難度。
 反過來講,要想把Java化為script,工作量會大大增加, 因為Java是“重量級的語言”。

end.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.