Annotation of OpenXM/doc/OpenXM-specs/formal-expression.tex, Revision 1.1
1.1 ! noro 1: %% $OpenXM$
! 2: //&jp \section{ CMO の形式的表現方法 }
! 3: //&eg \section{ A formal expression of CMO }
! 4:
! 5: /*&jp
! 6: 前の節で CMO の表現方法を形式的に定義せず,
! 7: CMO のBasic0 の表現法を説明したが,
! 8: ここでは, CMO の Lisp 風表現 (Lisp-like expression)
! 9: である
! 10: CMOexpression
! 11: および前節で説明した CMO の標準 encoding 法をもう一度説明する.
! 12: % (タグの省略記法がほしい.)
! 13: */
! 14: /*&eg
! 15: In the previous setion, we have explained the format of CMO's in the
! 16: Basic0 group.
! 17: In this section, we will introduce CMOexpression which is like the
! 18: bracket expression of Lisp.
! 19: We again explain a standard encoding method of CMO,
! 20: which we have already explained in the previous section.
! 21: */
! 22:
! 23: /*&jp
! 24:
! 25: まず, CMOexpression を形式的に 拡張 BNF 記法を用いて定義しよう.
! 26: タイプライタフォントでかかれた記号は終端記号を意味する.
! 27: ``:'' は定義を意味する. ``$|$'' は''または''を意味する.
! 28: \{ X \} は X の 0 回以上の繰り返しを表す.
! 29: [ x ] は X が 0 回または 1 回出現することを表す.
! 30: この記法を用いると CMOexpression は次のように定義できる.
! 31:
! 32: */
! 33: /*&eg
! 34:
! 35: Let us define CMOexpression by the extended BNF expression.
! 36: Symbols in the type writer fonts mean terminals.
! 37: ``:'' means a definition.
! 38: ``$|$'' means ''or''.
! 39: \{ X \} is a repetition of X of more than or equal to 0 times.
! 40: [ x ] stands for X or nothing.
! 41: By using this notation, CMOexpression is defined as follows.
! 42:
! 43: */
! 44:
! 45: /*&C
! 46: \begin{eqnarray*}
! 47: \mbox{CMOexpression}
! 48: &:& \quad
! 49: \mbox{\tt (} \mbox{\tt cmo\_tag} \
! 50: \{ \mbox{ expression} \} \mbox{\tt )}\\
! 51: \mbox{expression}
! 52: &:& \quad \mbox{CMOexpression} \\
! 53: & &|\ \mbox{\tt int32} \\
! 54: & &|\ \mbox{\tt string} \\
! 55: & &|\ \mbox{\tt byte} \\
! 56: \end{eqnarray*}
! 57: */
! 58: /*&jp
! 59: 終端記号 {\tt int32} は, 32 bit integer を表す, 10 進または 16 進の数字の
! 60: 列である.
! 61: 終端記号 {\tt string} は''文字''の列である.
! 62: 終端記号 {\tt byte} は 8 bit データを表す, 10 進または 16 進の数字の列である.
! 63:
! 64: */
! 65: /*&jp
! 66: Terminal {\tt int32} is signed 32 bit integer.
! 67: Terminal {\tt string} is a byte array which usually expresses a string.
! 68: Terminal {\tt byte} is 8 bit data.
! 69:
! 70: */
! 71:
! 72: /*&jp
! 73: CMOexpression にあらわれる各要素を区切るために {\tt ,} (コンマ) を用いてもよい.
! 74: {\tt cmo\_tag} は {\tt CMO\_} で始まる定数である.
! 75: CMOexpression で表現される object を CMObject と呼ぶ.
! 76:
! 77: */
! 78: /*&eg
! 79: The comma ({\tt ,}) may be used to separate each element in CMOexpressions.
! 80: {\tt cmo\_tag} is a constant that starts with {\tt CMO\_}.
! 81:
! 82: */
! 83:
! 84: /*&jp
! 85: この表記法 CMOexpression を利用して, CMO Basic0 の object を記述
! 86: してみよう.
! 87: Object 自体の構造を説明するため,
! 88: BNF をもうすこし拡張して, 非終端記号, 終端記号名のみならず, 変数の
! 89: 名前も書くことにする. こうすることにより, object の意味の説明も容易になる
! 90: からである. また ``---'' でコメントのはじまりを表すものとする.
! 91: */
! 92: /*&eg
! 93: Let us describe CMO's in the Basic0 group.
! 94: In order to explain the meaning of objects,
! 95: we may also put variable names to CMOexpressions.
! 96: The start of comments are denoted by ``---''.
! 97: */
! 98: /*&jp
! 99: たとえば, (CMObject の) 32 bit integer である integer32 を
! 100: BNFで定義すれば,
! 101: \begin{center}
! 102: Integer32 \ : \ ({\tt CMO\_INT32}, {\tt int32})
! 103: \end{center}
! 104: と書くのが本来の書き方による記法であるが, ここでは,
! 105: \begin{eqnarray*}
! 106: \mbox{Integer32} \ &:& \ ({\tt CMO\_INT32}, {\sl int32}\ n) \\
! 107: & & \ \mbox{--- 32 bit integer $n$ を表す. } \\
! 108: \end{eqnarray*}
! 109: と書くことを許すことにする.
! 110: このように書くことにより, 非終端記号 Integer32 は,
! 111: \begin{center}
! 112: Integer32 \ : \ ({\tt CMO\_INT32}, {\tt int32})
! 113: \end{center}
! 114: のように, 終端記号 {\tt CMO\_INT32} と {\tt int32} を成分にもち,
! 115: CMObject の
! 116: ({\tt CMO\_INT32}, {\sl int32}\ n)
! 117: は,
! 118: 32 bit integer $n$ を表現しているんだということが, 1 行でわかる.
! 119: */
! 120: /*&eg
! 121: (This part has not yet been translated.)
! 122: */
! 123: /*&jp
! 124: この記法を用いて, 前節で導入した, Basic0 の CMObject を
! 125: 形式的に定義しよう.
! 126: */
! 127: /*&eg
! 128: By using this notation, let us define formally CMObjects in the group
! 129: Basic0.
! 130: */
! 131:
! 132: /*&C
! 133:
! 134: \bigbreak
! 135: \noindent
! 136: Group CMObject/Basic0 requires nothing. \\
! 137: Error2, Null, Integer32, Datum, Cstring, Mathcap, List $\in$ CMObject/Basic0. \\
! 138: Document of CMObject/Basic0 is at {\tt http://www.math.kobe-u.ac.jp/OpenXM}
! 139: (in English and Japanese) \\
! 140: \begin{eqnarray*}
! 141: \mbox{Error2}&:& ({\tt CMO\_ERROR2}, {\sl CMObject}\, \mbox{ob}) \\
! 142: \mbox{Null} &:& ({\tt CMO\_NULL}) \\
! 143: \mbox{Integer32}
! 144: &:& ({\tt CMO\_INT32}, {\sl int32}\ \mbox{n}) \\
! 145: \mbox{Datum} &:& ({\tt CMO\_DATUM}, {\sl int32}\, \mbox{n}, {\sl byte}\,
! 146: \mbox{data[0]},
! 147: \ldots , {\sl byte}\, \mbox{data[n-1]}) \\
! 148: \mbox{Cstring}&:& ({\tt CMO\_STRING},{\sl int32}\, \mbox{ n},
! 149: {\sl string}\, \mbox{s}) \\
! 150: \mbox{Mathcap}&:& ({\tt CMO\_MATHCAP},{\sl CMObject}\, \mbox{ob} ) \\
! 151: \mbox{List} &:&
! 152: \mbox{({\tt CMO\_LIST}, {\sl int32}\, m, {\sl CMObject}\, ob[0], $\ldots$,
! 153: {\sl CMObject}\, ob[m-1])} \\
! 154: & & \mbox{--- m is the length of the list.}
! 155: \end{eqnarray*}
! 156:
! 157: */
! 158:
! 159:
! 160: //&jp Cstring で, {\sl string} s の部分を {\tt byte} に分解すれば,
! 161: //&eg In the definition of ``Cstring'', if we decompose ``{\sl string} s'' into bytes, then ``Cstring'' should be defined as
! 162: /*&C
! 163: \begin{eqnarray*}
! 164: \mbox{Cstring}&:& ({\tt CMO\_STRING},{\sl int32}\, \mbox{ n},
! 165: {\sl byte}\, \mbox{s[0]},
! 166: \ldots, {\sl byte}\ \mbox{s[n-1]})
! 167: \end{eqnarray*}
! 168: */
! 169: //&jp となる.
! 170: /*&jp
! 171: また,
! 172: ``Group CMObject/Basic0 requires nothing''
! 173: は, 以下は, グループ CMObject/Basic0 の定義であり,
! 174: このグループの CMObject を定義するのに, 要請される CMObject のグループは
! 175: ないことを示す.
! 176: ``Error2, Null, Integer32, Datum, Cstring, Mathcap, List
! 177: $\in$ CMObject/Basic0''
! 178: は, グループ CMObject/Basic0 には, Error2, Null, Integer32,
! 179: Datum, Cstring なるクラスの object が属することを示す.
! 180: */
! 181: /*&eg
! 182: また,
! 183: ``Group CMObject/Basic0 requires nothing''
! 184: means that there is no super group to define CMO's in the group Basic0.
! 185: ``Error2, Null, Integer32, Datum, Cstring, Mathcap, List
! 186: $\in$ CMObject/Basic0''
! 187: means that
! 188: Error2, Null, Integer32, Datum, Cstring
! 189: are members of the group CMObject/Basic0.
! 190: */
! 191:
! 192: /*&C
! 193:
! 194: */
! 195:
! 196: /*&jp
! 197: では, 実際のデータの表現の例をみてみよう.
! 198: たとえば, 32 bit integer の 1234 は,
! 199: */
! 200: /*&eg
! 201: Let us see examples.
! 202: 32 bit integer 1234 is expressed as
! 203: */
! 204: /*&C
! 205: \begin{center}
! 206: ({\tt CMO\_INT32}, 1234)
! 207: \end{center}
! 208: */
! 209: /*&jp
! 210: とかく.
! 211: 文字列 ``Hello'' は
! 212: */
! 213: /*&eg
! 214: The string ``Hello'' is expressed as
! 215: */
! 216: /*&C
! 217: \begin{center}
! 218: ({\tt CMO\_STRING}, 5, "Hello")
! 219: \end{center}
! 220: */
! 221: //&jp と書く.
! 222:
! 223: /*&C
! 224:
! 225: */
! 226: /*&jp
! 227: CMOexpression と, CMObject の区別を理解しておくのは重要である.
! 228: たとえば
! 229: \begin{center}
! 230: ({\tt CMO\_INT32}, 234, "abc",({\tt CMO\_STRING}))
! 231: \end{center}
! 232: は CMOexpression ではあるが, CMObject ではない.
! 233: これは, 文法的には正しいプログラムだが, なにをやるのかは全く不明な
! 234: プログラムと似ている.
! 235:
! 236: さて, Open math 風 (\cite{openmath})
! 237: の SGML 表現法も可能であり, その場合は, 上の二つの例は次のように
! 238: 書く.
! 239: \begin{verbatim}
! 240: <CMO_INT32>
! 241: 1234
! 242: </CMO_INT32>
! 243:
! 244: <CMO_STRING>
! 245: 5
! 246: "Hello"
! 247: </CMO_STRING>
! 248: \end{verbatim}
! 249: */
! 250:
! 251: /*&C
! 252:
! 253: */
! 254:
! 255: /*&jp
! 256: 次に, 標準 encoding 法を説明しよう.
! 257: 標準 encoding 法では, cmo\_tag を ネットワークバイトオーダーの
! 258: 32 bit integer {\tt int32} に,
! 259: その他のフィールドは, 定義に記述されているデータ型に従い,
! 260: byte データ {\tt byte} かまたは
! 261: ネットワークバイトオーダーの 32 bit integer {\tt int32} に, 変換する.
! 262: */
! 263: /*&eg
! 264: Let us explain the standard encoding method.
! 265: All {\tt int32} data are encoded into network byte order 32 bit integers
! 266: and byte data are encoded as it is.
! 267: */
! 268:
! 269: /*&C
! 270:
! 271: */
! 272:
! 273: /*&jp
! 274: 高速の通信方法を用いて
! 275: 効率を重視する接続の場合には, {\tt int32} を network byte order
! 276: に変換する操作がおおきなオーバヘッドとなることが
! 277: 報告されている.
! 278: 100Mbps の通信路で 12Mbytes の {\tt CMO\_ZZ} の転送では
! 279: 約 90\% の時間が network byte order への変換についやされているという
! 280: 実験データもある.
! 281: 効率を重視した encoding 法については後述する.
! 282: */
! 283: /*&eg
! 284: When we are using a high speed network,
! 285: the translation from the internal expression of 32 bit integers to
! 286: network byte order may become a bottle neck.
! 287: There are experimental data which presents that 90 percents of the transmission
! 288: time are
! 289: for the translation to the network byte order to send {\tt CMO\_ZZ} of size
! 290: 12M bytes on a 100Mbps network.
! 291: In a later section, we will discuss a protocol to avoid the translation.
! 292: */
! 293:
! 294: /*&C
! 295:
! 296: */
! 297:
! 298: /*&jp
! 299: 標準 encoding と CMOexpression の間の変換は容易である.
! 300: 前節で用いたデータの表記法,
! 301: たとえば,
! 302: */
! 303: /*&eg
! 304: The translation between the standard encoding and CMOexpression
! 305: is easy.
! 306: For example,
! 307: */
! 308: /*&C
! 309: \begin{center}
! 310: \begin{tabular}{|c|c|}
! 311: \hline
! 312: {\tt int32 CMO\_INT32}& {\tt int32 1234} \\
! 313: \hline
! 314: \end{tabular}
! 315: \end{center}
! 316: */
! 317: /*&jp
! 318: は, CMOexpression
! 319: */
! 320: /*&eg
! 321: is the encoding of the CMOexpression
! 322: */
! 323: /*&C
! 324: \begin{center}
! 325: ({\tt CMO\_INT32}, 1234)
! 326: \end{center}
! 327: */
! 328: /*&jp
! 329: の 標準 encoding 法による表現である.
! 330: */
! 331:
! 332:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>