非侵入的パターンと侵入的パターン
新しい用語法によれば、パターンは次のいずれかの形である。
- 原子パターン(atomic pattern)
- 原子パターンのOrElse結合
デフォルトで、パターンは非侵入的であるとする。つまり、あるノードにマッチングした場合(成功時)、次のノードは水平順序により決定する。ただしこれは、検索範囲がDescendantで決まるときのことで、他の形の検索範囲ではトップダウン順序と水平順序の差はない。
パターンを侵入的にしたいときは、直前にバッククォートを置く。侵入的パターンの構文は、
- '`' 原子パターン
- '`' 原子パターンのOrElse結合
となる。バッククォートは区切り記号として扱うので、`<div></> でも ` <div></> (空白あり)でもよい。
バッククォートの導入で、抽出式は、パターンに次の情報を加えたものとなる。
- 侵入性
- 検索範囲
- 値の形式
extract(a, E) は抽出式Eの侵入性の情報も考慮して、検索範囲のトラバースを行う。
侵入性が意味を持つのは検索範囲がDescendantノードセットのときだけで、他の検索範囲においては効果はない。だが、構文上のエラーにはしない。* + `<div></> は構文的には問題ないが、* + <div></> (バッククォートなし)と何も変わらない。