2

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)
4

1 に答える 1