我閱讀JSON(http://www.json.org/)和解析器的上下文無關語法:如何解析JSON文本以生成對象或數組(https://github.com/douglascrockford/JSON-js/blob/master/json_parse_state.js)。如何將json的上下文自由語法轉換爲狀態機?
但我不知道如何將JSON cfg轉換爲狀態機。
任何人都可以更詳細地描述?
我閱讀JSON(http://www.json.org/)和解析器的上下文無關語法:如何解析JSON文本以生成對象或數組(https://github.com/douglascrockford/JSON-js/blob/master/json_parse_state.js)。如何將json的上下文自由語法轉換爲狀態機?
但我不知道如何將JSON cfg轉換爲狀態機。
任何人都可以更詳細地描述?
您不能構建「解析」json的狀態機,因爲狀態機在技術上無法匹配嵌套括號。
您可以構建一個下推自動機(PDA),使用堆棧來跟蹤括號。如果你手動完成,你將會構建一個類似LR(0)解析器的東西。 如果您打算這麼做,使用LALR解析器生成器會更容易,該生成器將爲您帶來語法和構建PDA。
您還可以通過在識別器中「編譯」語法規則來編寫自己的遞歸下降解析器。對於JSON來說,這是一件相當合理的事情;語言並不複雜。看到我的回答how to build a recursive descent parser。
但是lib(https://github.com/douglascrockford/JSON-js/blob/master/json_parse_state.js)確實使用狀態機。你有沒有考慮過源代碼?它是自下而上的解析器嗎? – zhao6
您可以使用FSA和堆棧實現PDA。我沒有看過代碼。我敢打賭有一個堆棧來跟蹤嵌套的結構。 –
您能告訴我們您編譯時想要實現的計劃嗎?也許有人有另一種選擇。 – Randy
你需要什麼「狀態機」?請注意,JSON不能由DFA描述。 – Bergi
但[lib](https://github.com/douglascrockford/JSON-js/blob/master/json_parse_state.js)確實使用狀態機。它怎麼做?使用自下而上的解析器?我sitll無法獲得狀態機。 – zhao6