グループ内に内部グループを持つコンマ区切りグループ(角カッコで囲んである)を解析する必要があります。外部のグループのみを分離する必要があります。内部グループを持つ可能性のあるコンマ区切りグループを解析するためのlpeg文法
私はこれを行う機能を持っている:
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文法を変更して外部のグループを許可する方法はありますか?私はLPegで文法を作るの専門家ではないよ、私が行うことが、この演習では、面白い発見
lpeg.T_WSpace、lpeg.T_Groupおよびlpeg.T_LGroupとは何ですか? – PhiLho
@philho笑、彼らが何であるかはっきりしているはずです – Uiy
おそらく、答えを得る機会を増やすために彼らの定義を与える方が良いです...私は推測することができますが、答えたい人の仕事を楽にする方が、あなたがまだそれを望むならば、正確な答えを持つこと。 – PhiLho