創作內容

2 GP

7/9,稍微解釋下研究parser用意何在

作者:李兒諳│2016-07-09 17:15:47│巴幣:4│人氣:84
準確來說,我要研究的不是parser
而是腳本語言(script language)
腳本語言簡單的解釋就是:
"只改一份文件的內容,卻可以完成自己的目標"

其實之前在網頁版文字型冒險遊戲中
就有實現過個簡單的腳本語言
臉皮厚一些的話可以說實現個簡單的parser
但因為沒有詞素(lexemes),token,也沒生成語法樹(syntax tree)
所以應該是不算parser的
嗯,我的做法就是直接字串比對嘛

那為什麼需要詞素(lexemes)、token跟語法樹?
其實也不見得需要啦
像過往我網頁遊戲的寫法
各類算式、招式名稱等都寫在javascript中

而理論上比較好的做法是
透過一份文件來修改
就像是寫網頁式文字型冒險遊戲
劇本與選項透過文字檔來設定那樣
這樣就能避免修改主程式可能帶來的錯誤與麻煩

還有個好處是,因為不用動到主程式
因此規劃好格式之後
兩邊的工作可以由不同人同時進行

那要怎麼樣才能辦到"只透過份文字檔來修改些參數設定與細節"這目的呢
理論上是需要詞素、token跟生成語法樹的
若是文字型冒險遊戲
在不進行自由宣告變數,和變數值與條件式配合的狀況下
還可以硬用字串比對的做法
但如果想完成戰鬥傷害公式
damage = power(init_damage,1.07) * 角色情緒 + random()*50
這種較複雜或更複雜的設定
更複雜的設定像是配合if-else敘述
上述例子就需要詞素、token跟生成語法樹了
而上述在此就簡稱為parser
不過若不考慮複雜的設計的話
還是可以用之前那接近寫死的方式來處理

雖然嚴格上來說parser前有兩個步驟
就是先讀入文字檔產生詞素
再跟token表比對確認各詞素屬性
(因此token表也是要事先建立好,就像是程式語言會有關鍵字、保留字列表那樣)
把產生的token再丟給parser
不過有些時候,parser會把這兩步驟(也就是詞法分析,lexical Analysis)也考量在內
所以簡稱為parser
不然前面應該是還有個tokenizer(將詞素token化)

嗯,雖然前面寫了很多術語
但簡單來說
目的還是"只透過份文字檔來修改些參數設定與細節"
細節可以細到什麼地步?
如果遊戲程式講究美工的話
可以把些粒子效果與畫面顯示的參數設定也放在文字檔(或稱為腳本)中
有那麼些像網頁把CSS語法獨立做成.css檔那樣
其實目的應該還要再加一句話
"在不改遊戲主程式的狀況下,所有遊戲設定透過文字檔(腳本)完成"
這麼做還有個好處是,比較能夠熱更新
若更新需要動到主程式的話
以手機遊戲來說可能就要再次經過上架審核
(我當然不清楚實際情況,不過在網上有看到這種說法)
那會是很麻煩的一件事情
特別是緊急修bug或遊戲限時活動疏忽的話
更不能那樣等了
(而且持續去google play store或apple對應的下載apk等主程式也很麻煩)

若達到這目的不需要parser的話
就可以不理會parser了

可能會有幫助的關鍵字是
PEG.js
不過這個安裝可能會需要nodejs
PEG.js的優點是
有線上版可以試用
感受下解析自訂語法的威力
但能的話還是希望能純用javascript完成

大概就這樣
目前還有蠻多地方要研究的
而且隱約覺得不太好下手
網頁版文字型冒險遊戲的腳本
不清楚是好的開始還是壞的開始
但我想我大概會以那做法為基礎再想辦法修改!!
因為最近看了一下原始碼
感覺沒什麼頭緒
可能還是要土法煉鋼下比較有感覺!!
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3248751
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:parser|PEG.js

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

2喜歡★y541258 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:天使帝國4相關的一些感想... 後一篇:7/12,閒聊與國考之高...

追蹤私訊切換新版閱覽

作品資料夾

leon770530巴友
我的小屋首頁共有4篇健身相關證照心得文,對健身有興趣的朋友可以來看看喔!看更多我要大聲說昨天23:02


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】