このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

非侵入的パターンと侵入的パターン

新しい用語法によれば、パターンは次のいずれかの形である。

  1. 原子パターン(atomic pattern)
  2. 原子パターンのOrElse結合

デフォルトで、パターンは非侵入的であるとする。つまり、あるノードにマッチングした場合(成功時)、次のノードは水平順序により決定する。ただしこれは、検索範囲がDescendantで決まるときのことで、他の形の検索範囲ではトップダウン順序と水平順序の差はない。

パターンを侵入的にしたいときは、直前にバッククォートを置く。侵入的パターンの構文は、

  1. '`' 原子パターン
  2. '`' 原子パターンのOrElse結合

となる。バッククォートは区切り記号として扱うので、`<div></> でも ` <div></> (空白あり)でもよい。

バッククォートの導入で、抽出式は、パターンに次の情報を加えたものとなる。

  1. 侵入性
  2. 検索範囲
  3. 値の形式

extract(a, E) は抽出式Eの侵入性の情報も考慮して、検索範囲のトラバースを行う。

侵入性が意味を持つのは検索範囲がDescendantノードセットのときだけで、他の検索範囲においては効果はない。だが、構文上のエラーにはしない。* + `<div></> は構文的には問題ないが、* + <div></> (バッククォートなし)と何も変わらない。