1 回答

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是一個(gè)雙重問題:第一個(gè)可能是在getInlineParams
函數(shù)中簡化邏輯的方法,這對于這些簡單的情況可能沒有問題,但對于更復(fù)雜的情況可能會(huì)很糟糕。
第二個(gè)問題是完全無視類型。
{'{test}': coolFunctionWhichReturnsString('testParameter')}
被解析為(讀作“字符串值”-“令牌類型”):
{
- 阻止開始{test}
- 一個(gè)字符串:
- 標(biāo)點(diǎn)符號(hào)coolFunctionWhichReturnsString
- 一個(gè)名字(
-(不確定是哪種類型)testParameter
- 一個(gè)字符串)
- (再次)}
- 塊結(jié)束
當(dāng)您嵌套多個(gè) {} 時(shí),第一個(gè)問題將展開。第二個(gè)問題是由于一個(gè)簡單的事實(shí):
該類型很重要。
詞法分析器有一項(xiàng)非常重要的任務(wù),它刪除用戶可能選擇表達(dá)字符串、注釋的所有不同變體,它刪除不相關(guān)的空格(因?yàn)樗皇请s亂無章)等等?,F(xiàn)在,如果你把每個(gè)Token
(有一個(gè)值和一個(gè)類型)當(dāng)作只是一個(gè)包含你想要的字符串的奇怪對象,你就會(huì)遇到問題 - 很明顯。
因此,如果要重新創(chuàng)建類似于原始輸入的內(nèi)容,則必須查看類型并在類型為字符串時(shí)添加引號(hào)。(文本可能是塊之外的所有東西)
(這將是您所述問題的快速“解決方案”)
但是,從長遠(yuǎn)來看,忽略標(biāo)記的語義會(huì)導(dǎo)致問題……因?yàn)槟€必須以某種方式處理“coolFunctionWhichReturnsString”,即,您必須將其轉(zhuǎn)換為某個(gè)函數(shù)調(diào)用。從理論上講,您應(yīng)該真正構(gòu)建一個(gè) AST 并在某個(gè)時(shí)候?qū)⑵渚幾g成適當(dāng)?shù)男问?.....
樹枝解析器使用一種方法subparse
來解析內(nèi)容,直到出現(xiàn)某個(gè)“結(jié)束”。(建立 AST,因?yàn)榻Y(jié)構(gòu)在某些時(shí)候也很重要)
更新:事實(shí)證明,在樹枝文檔中有一個(gè)用于編寫節(jié)點(diǎn)解析器的頁面,如果您遵循https://twig.symfony.com/doc/2.x/advanced.html,它可能會(huì)簡化很多#registering-a-new-tag(信息從略高于“注冊新標(biāo)簽”開始,非常簡化了值的解析和使用)
- 1 回答
- 0 關(guān)注
- 237 瀏覽
添加回答
舉報(bào)