2012-01-15 76 views
11

我知道這裏有一些關於這個主題的問題,但很難找到對我後來的東西有用的東西...教程或介紹寫一個簡單的腳本語言?

我也知道它可能最終會成爲相當的任務完成,但我真的想爲遊戲引擎做一個簡單的腳本語言......我想在C++和我的Android Java遊戲引擎中使用它......但我不知道從哪裏開始......我試過了在網上尋找教程,但很多需要轉換的東西字節碼,虛擬機等...

我真的只是想創建一個簡單的腳本語言,可以從引擎讀取,有一些簡單的「if/else 「邏輯......可以從其他腳本等等調用的簡單函數......也許甚至是s實施早期版本...我真的不知道從哪裏開始,但我確實知道這是我需要開始學習和理解的東西。

如果任何人都可以指出我正確的方向,並指出一些非常簡單的「爲遊戲製作簡單的腳本語言」類型的教程甚至指出一些我應該研究的關鍵概念的鏈接。我真的很感激。我更喜歡極簡主義的基於C的腳本語言,但我想具體會進入它,一旦我真的學到了更多的關於它。

感謝任何人的幫助。

+3

你真的想創建一個新的腳本*語言*嗎?你不能用現有的語言爲你的遊戲引擎提供腳本*界面嗎? – Thilo 2012-01-15 06:05:14

+1

我知道這不是「基於C」的,但Lua腳本是一種足夠簡單的語言來學習和編寫腳本。 – Zack 2012-01-15 06:12:30

+0

@Thilo:從技術上講,我可能不需要,但我認爲這可能是非常有用的後來保持我的Android和PC工作之間的交叉兼容性......但是如果我現在可以找到一種腳本語言並不是太痛苦的實現到我的C++編輯器和我的Android引擎中,我想我會研究它。 – Kalisme 2012-01-15 06:12:46

回答

4

我試着尋找在線教程,但很多需要的東西轉換成字節碼,虛擬機和等

是。這確實是一種方法,即使對於一種簡單的語言也是如此。直接執行源代碼會變得更加複雜,這樣做的方式是首先解析源代碼並將其消化爲字節代碼,然後讓虛擬機解釋字節代碼。

您可能需要查看現有語言以瞭解其設計。

This tutorial來自flipcode構建一個簡單的語言,幷包括所有的代碼,所以它可能是有用的。

您還可以查看Lua源代碼。

4

我工作的一部分是維護專有的遊戲腳本語言。我不知道有關狹義這個主題的任何「指導性」書籍。 Bruce Wilcox在撰寫這樣的語言時有一篇有趣的文章。它沒有討論實現細節,而是在一定程度上進入了設計過程。

http://www.gamasutra.com/view/feature/1570/reflections_on_building_three_.php

編寫一個腳本語言是這樣寫的任何語言,涉及所有相同的原理和設計問題。你需要考慮你的語言應該圍繞什麼概念,你需要定義一個語法,然後你需要編寫一個編譯器或翻譯器和/或解釋器。你選擇哪個以及他們實現的細節完全取決於你,而沒有人或最好的方法來完成這些事情。

解析語法和定義語言語法時有標準的思維方式。正則表達式在這裏是你的朋友。謝天謝地,C++ 11包含了<regex>庫(最初來自boost)。如果你真的想深入瞭解這個主題,那麼選擇一本關於編譯器的書可以幫助你開始重要的概念。當我在大學學習編譯器課程時,這是我的教科書,我一直堅持到現在,所以我推薦它。

http://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886/ref=sr_1_2?ie=UTF8&qid=1326618572&sr=8-2

編寫語言是一個奇妙的運動在計算機科學。但是,如果這是一個真正的項目或產品,那麼和其他已經評論過的其他人一樣,我的專業建議是:如果您不需要,請不要這樣做。這是您正在考慮的一項巨大的潛在時間投資,而且您問自己:我會從我自己的語言中獲得哪些好處,而這些語言是我在現有免費使用的語言(如Lua和Python)中找不到的,以及這些好處是否值得花費額外時間來實施?

並且不要忘記工具。如果您正在編寫一種您打算讓別人使用的語言,則需要大量文檔和工具,工具和工具。你幾乎肯定會希望至少有一個源代碼級的調試器,編寫一個好的調試器可以花更長的時間來編寫語言本身!如果你想要的只是快速原型遊戲邏輯的語言,那麼Lua可能不僅僅適合你的需求,而且還有大量現有的文檔,文獻和工具。

3

幾個老文章還是很好看的,如果你能找到他們:

  • M. Abrash,D Illowsky,「有迷你解釋自己動手minilanguages」,博士道博的日記14( 9)(1989年9月)52-72。
  • J. Bentley,「Programming pearls:little languages」,Communications of the ACM 29(1986)711-721。
  • D. Betz,「嵌入式語言」,字節13#12(1988年11月)409-416。
  • D. Betz,「你自己的小小的面向對象的語言」,Dobb博士的雜誌16(9)(1991年9月)26-33。
  • N. Franks,「在軟件中添加擴展語言」,Dobb博士雜誌16(9)(1991年9月)34-43。
  • R.Valdés,「小語言,大問題」,Dobb博士雜誌16(9)(1991年9月)16-25。

另請參見Betz的Bob: A Tiny Object-Oriented Language。 BOB的最新消息來源爲http://www.xlisp.org/