Lua のシリアル化ライブラリを作成しており、LPeg を使用して文字列を解析しています。K/V ペアが機能しています (明示的に名前が付けられたキーを使用)。しかし、ここで自動インデックスを追加します。
次のように動作します。
@"value"
@"value2"
に評価されます
{
[1] = "value"
[2] = "value2"
}
すでに値のマッチングが機能しているので (文字列、テーブル、数値、およびブール値はすべて完全に機能します)、それについての助けは必要ありません。私が探しているのはインデックスです。@[値パターン] の一致ごとに、見つかった @[値パターン] の数を取得する必要があります。つまり、値のシーケンス ("@"value1" @"value2") を一致させることはできますが、一致させることはできません。一致の数に応じてインデックスを割り当てる方法がわからない. それが十分に明確でない場合は、コメントしてください.
これが私の現在のパターンの一部です(圧縮表記を使用):
local process = {} -- Process a captured value
process.number = tonumber
process.string = function(s) return s:sub(2, -2) end -- Strip of opening and closing tags
process.boolean = function(s) if s == "true" then return true else return false end
number = [decimal number, scientific notation] / process.number
string = [double or single quoted string, supports escaped quotation characters] / process.string
boolean = P("true") + "false" / process.boolean
table = [balanced brackets] / [parse the table]
type = number + string + boolean + table
at_notation = (P("@") * whitespace * type) / [creates a table that includes the key and value]
コードの最後の行でわかるように、これを行う関数があります。
k,v matched in the pattern
-- turns into --
{k, v}
-- which is then added into an "entry table" (I loop through it and add it into the return table)