HyLex

HyLex

[1] HyTime 字句模型記法 (lexical model notation) (HyLex) は、字句模型を記述するための方法の一種として ISO/IEC 10744:1997 で規定されている表記法です。

仕様書: ISO/IEC 10744:1997

構文

[2] HyLex の構文は、基本的には SGML内容模型の構文と同じですが、幾つかの違いがあります。

仕様書の文章をもとに ABNF にしてみました。 (一部 ts が抜けています。) ISO 8879 に合わせて ts ですが、 たぶん引数実体参照は使えないので、実際には s です。

(生成規則くらい規格に書いておいてほしいなあ。)

[4]

NOT
一致しないものと一致します。 (正規表現の ^ のようなものですが、文字ではなく文字列が対象です。) HyLex では一致個数を制限する方法はありません。 使用例をみると零個以上無限大個と一致するみたいです。
ORDER
一致を試みる前に適用する辞書式順序を指定します。
CHECK
内容字句や模型群に一致したデータに適用する追加字句制約の名前を指定します。 この追加字句制約を満足しなくても一致処理に影響はありません。 (とはどういう意味? 単に誤りとして報告しないというだけか、あるいはそこまでの一致を取り消すこともないのか。)

[6] 陽には規定されていませんけど、やはり SGML内容模型と同様に後戻りはなしでしょうか。

正規化字句模型

[11] 字句型が本質的に空白で分離した字句の並びであるときには、「正規化」模型を使用できます。

正規化模型はデータ属性 norm の値を norm とします (既定値)。 非正規化模型は unorm とします。

[12] 正規化模型は、次の手順で非正規化模型に変換できます。

  1. 表記内容字句の後に、修飾子 #ORDER SGMLCASE を置く (SGMLCASEISO 8879:1986//NOTATION LEXORD Namecase substitution//EN)。
  2. 各内容字句を一致字句模型とする。 このとき、 #ORDER#CHECK は一致字句模型群に入れるが、出現標識は除く。
  3. 連続下位模型群の間に s+ を挿入する。
  4. PLUSREP のついた下位模型群を開く:
  5. 最上位模型群が OR 群なら、 その一つ上に連続群を置く。
    • 例: (a | b)( ([a] | [b]) )
  6. 最上位模型群の最初と最後に s* を挿入する。
    • 例: (a | b)(s*, ([a] | [b]), s*)]]

[12] ISO/IEC 10744:1997 のマーク宣言の注釈にある、 属性データ内容字句型の定義 (表記法注釈) で、 Lextype: の後に記述されているものは正規化模型 (norm=norm), Ulextype: の後に記述されているものは非正規化模型 (norm=unorm) です。

公開識別子と属性

[7] HyLex の公開識別子ISO/IEC 10744:1997//NOTATION HyTime lexical model notation (HyLex)//EN です。

[8] 属性:

名前値の型既定値説明
normnorm | unormnorm正規化
altreps
included
superdcn

[9] 宣言例:

<!NOTATION HyLex
  PUBLIC "ISO/IEC 10744:1997//NOTATION
          HyTime lexical model notation (HyLex)//EN">
<!ATTLIST #NOTATION HyLex
  norm (norm | unorm) norm
  %ga.common.attrib;
>

[10] HyLex は一般体系 (ISO/IEC 10744:1997//DTD AFDR Meta-DTD General Architecture//EN) で記法 HyLex として宣言されています。