式の数量詞: Greedy、Reluctant、および Possessive な動作
デフォルトでは、数量詞は Greedy な動作を行います。Greedy な動作とは、式が、マッチを成立させつつ、できる限り多くのトークンを消費しようとすることを意味します。この動作は、'?' を付加することによって Reluctant なマッチングに、'+' を付加することによって Possessive なマッチングに変更することができます。
Reluctant なマッチングとは、式が、マッチを成立させつつ、できる限り少なくトークンを消費しようとすることを意味します。
Possessive なマッチングとは、マッチの成立が妨げられる場合であっても、できる限り多くのトークンを消費しようとすることを意味します。
- 1 回以上の数量詞の例
Greedy
- <Field1> の Greedy な動作は、ルールにマッチする最大数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field2> は、<Field1> によって放棄が強制される最小数のトークンのみを受け入れます。
- <Field3> は、<Field1> によって放棄が強制される単一のトークンのみを受け入れます。
Reluctant
- <Field1> の Reluctant な動作は、ルールにマッチする最小数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field2> は Greedy であり、<Field1> によって放棄された最大数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field3> は、<Field2> によって放棄が強制される単一のトークンのみを受け入れます。
Possessive
- <Field1> の Possessive な動作は、ルールにマッチする最大数のトークンを受け入れつつ、残りのルールにマッチするトークンはいっさい放棄しません。
- <Field1> は Possessive なので、<Field2> で使用できるトークンはありません。3. <Field1> は Possessive なので、<Field3> で使用できるトークンはありません。
- 入力はパースされません。
Greedy
- <Field1> の Greedy な動作は、ルールにマッチするいっさいのトークンまたは最大数のトークンを受け入れず、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field1> は Greedy なので、<Field2> は <Field1> によって放棄が強制される最小数のトークンのみを受け入れます。<Field2> の最小数は 0 なので、0 のトークンはこのルールにマッチします。
- <Field1> は Greedy なので、<Field3> は <Field1> によって放棄が強制される単一のトークンのみを受け入れます。
Reluctant
- <Field1> の Reluctant な動作は、ルールにマッチするいっさいのトークンまたは最小数のトークンを受け入れず、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field2> は Greedy であり、<Field1> によって放棄された最大数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field3> は、<Field2> によって放棄が強制される単一のトークンのみを受け入れます。
Possessive
- <Field1> の Possessive な動作は、ルールにマッチするいっさいのトークンまたは最大数のトークンを受け入れず、残りのルールにマッチするトークンを放棄しません。
- <Field1> は Possessive なので、<Field2> で使用できるトークンはありません。
- <Field1> は Possessive なので、<Field3> で使用できるトークンはありません。入力はパースされません。
0 または 1 回の数量詞の例
Greedy
- <Field1> の Greedy な動作は、ルールにマッチするいっさいのトークンまたは最大数のトークンを受け入れず、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field2> は、<Field1> によって放棄が強制される最小数のトークンのみを受け入れます。
- <Field3> は、<Field1> によって放棄が強制される単一のトークンのみを受け入れます。
Reluctant
- <Field1> の Reluctant な動作は、ルールにマッチする最小数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field2> は Greedy であり、<Field1> によって放棄された最大数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field3> は、<Field2> によって放棄が強制される単一のトークンのみを受け入れます。
Possessive
- <Field1> の Possessive な動作は、ルールにマッチするいっさいのトークンまたは最大数のトークンを受け入れず、残りのルールにマッチするトークンを放棄しません。
- <Field1> は Possessive なので、<Field2> で使用できるトークンは 1 つだけです。
- <Field1> は Possessive なので、<Field3> で使用できるトークンはありません。入力はパースされません。
- Min/Max 数量詞の例
Greedy
- <Field1> ルールの Reluctant な動作は、ルールにマッチする最小数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field2> は、<Field1> によって放棄が強制される最小数のトークンのみを受け入れます。
- <Field3> は、<Field1> によって放棄が強制される単一のトークンのみを受け入れます。
Reluctant
- <Field1> の Reluctant な動作は、ルールにマッチする最小数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field2> は Greedy であり、<Field1> によって放棄された最大数のトークンを受け入れつつ、残りのルールにマッチするために必要な場合にのみトークンを放棄します。
- <Field3> は、<Field2> によって放棄が強制される単一のトークンのみを受け入れます。
Possessive
- <Field1> の Possessive な動作は、ルールにマッチする最大数のトークンを受け入れつつ、残りのルールにマッチするトークンはいっさい放棄しません。
- <Field1> は Possessive なので、<Field2> で使用できるトークンは 2 つあります。
- <Field3> は、<Field2> によって放棄が強制される単一のトークンのみを受け入れます。