0

グループ内に内部グループがある可能性があるコンマ区切りのグループ (括弧で囲まれている) を解析する必要があります。外部グループのみを分離する必要があります。

これを行う関数があります:

function lpeg.commaSplit(arg)
    local P,C,V,sep = lpeg.P, lpeg.C, lpeg.V, lpeg.P(",")
    local p = P{
        "S";
        S = lpeg.T_WSpace * C(V"Element") * (lpeg.T_WSpace * sep * lpeg.T_WSpace * C(V"Element"))^0 * lpeg.T_WSpace,
        Element = (V"Group")^0 * (1 - lpeg.T_Group - sep)^0 * (V"Group" * (1 - lpeg.T_Group - sep)^0)^0 * (1 - sep)^0,
        Group = lpeg.T_LGroup * ((1 - lpeg.T_Group) + V"Group")^0 * lpeg.T_RGroup
    }^-1
    return lpeg.match(lpeg.Ct(p), arg)

end

しかし問題は、グループを囲む可能性のある余分なブラケットを削除することです。

テスト文字列は次のとおりです。

[[a,b,[c,d]],[e,[f,g]]]

に解析する必要があります

[a,b,[c,d] & [e,[f,g]]

内部グループがそのままになっていることに注意してください。のような文字列になってしまうため、末尾の余分な括弧を単純に削除しても機能しませんa,b,[c,d]],[e,[f,g]

外部グループを許可するためにlpeg文法を変更する方法はありますか?

4

1 に答える 1