Datum-syntax.xhtml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg">
  3. <head>
  4. <title>Datum syntax</title>
  5. <link rel="stylesheet" type="text/css" href="docbook-epub.css"/>
  6. <link rel="stylesheet" type="text/css" href="kawa.css"/>
  7. <script src="kawa-ebook.js" type="text/javascript"/>
  8. <meta name="generator" content="DocBook XSL-NS Stylesheets V1.79.1"/>
  9. <link rel="prev" href="Lexical-syntax.xhtml" title="Lexical syntax"/>
  10. <link rel="next" href="Hash-prefixed-forms.xhtml" title="Hash-prefixed forms"/>
  11. </head>
  12. <body>
  13. <header/>
  14. <section class="sect1" title="Datum syntax" epub:type="subchapter" id="Datum-syntax">
  15. <div class="titlepage">
  16. <div>
  17. <div>
  18. <h2 class="title" style="clear: both">Datum syntax</h2>
  19. </div>
  20. </div>
  21. </div>
  22. <p>The datum syntax describes the syntax of syntactic data in terms of a
  23. sequence of <em class="replaceable"><code>lexeme</code></em>s, as defined in the lexical syntax.
  24. </p>
  25. <p>The following grammar describes the syntax of syntactic data in terms of
  26. various kinds of lexemes defined in the grammar in section “Lexical
  27. Syntax”:
  28. </p>
  29. <div class="literallayout">
  30. <p><a id="idm139667879522976" class="indexterm"/><span id="meta-datum"/><em class="replaceable"><code>datum</code></em> <code class="literal">::=</code> <a class="link" href="Datum-syntax.xhtml#meta-defining-datum"><em class="replaceable"><code>defining-datum</code></em></a><br/>
  31.          | <a class="link" href="Datum-syntax.xhtml#meta-nondefining-datum"><em class="replaceable"><code>nondefining-datum</code></em></a><br/>
  32.          | <a class="link" href="Datum-syntax.xhtml#meta-defined-datum"><em class="replaceable"><code>defined-datum</code></em></a><br/>
  33. <a id="idm139667879518480" class="indexterm"/><span id="meta-nondefining-datum"/><em class="replaceable"><code>nondefining-datum</code></em> <code class="literal">::=</code> <a class="link" href="Datum-syntax.xhtml#meta-lexeme-datum"><em class="replaceable"><code>lexeme-datum</code></em></a><br/>
  34.          | <a class="link" href="Datum-syntax.xhtml#meta-compound-datum"><em class="replaceable"><code>compound-datum</code></em></a><br/>
  35. <br/>
  36. <a id="idm139667879514832" class="indexterm"/><span id="meta-lexeme-datum"/><em class="replaceable"><code>lexeme-datum</code></em> <code class="literal">::=</code> <a class="link" href="Boolean-values.xhtml#meta-boolean"><em class="replaceable"><code>boolean</code></em></a> | <em class="replaceable"><code>number</code></em><br/>
  37.          | <a class="link" href="Characters.xhtml#meta-character"><em class="replaceable"><code>character</code></em></a> | <a class="link" href="String-literals.xhtml#meta-string"><em class="replaceable"><code>string</code></em></a> | <a class="link" href="Datum-syntax.xhtml#meta-symbol"><em class="replaceable"><code>symbol</code></em></a><br/>
  38. <a id="idm139667879509136" class="indexterm"/><span id="meta-symbol"/><em class="replaceable"><code>symbol</code></em> <code class="literal">::=</code> <a class="link" href="Lexical-syntax.xhtml#meta-identifier"><em class="replaceable"><code>identifier</code></em></a><br/>
  39. <a id="idm139667879506336" class="indexterm"/><span id="meta-compound-datum"/><em class="replaceable"><code>compound-datum</code></em> <code class="literal">::=</code> <a class="link" href="Datum-syntax.xhtml#meta-list"><em class="replaceable"><code>list</code></em></a> | <a class="link" href="Datum-syntax.xhtml#meta-vector"><em class="replaceable"><code>vector</code></em></a> | <a class="link" href="Uniform-vectors.xhtml#meta-uniform-vector"><em class="replaceable"><code>uniform-vector</code></em></a> | <a class="link" href="Arrays.xhtml#meta-array-literal"><em class="replaceable"><code>array-literal</code></em></a> | <a class="link" href="String-literals.xhtml#meta-extended-string-literal"><em class="replaceable"><code>extended-string-literal</code></em></a> | <a class="link" href="XML-literals.xhtml#meta-xml-literal"><em class="replaceable"><code>xml-literal</code></em></a><br/>
  40. <a id="idm139667879499440" class="indexterm"/><span id="meta-list"/><em class="replaceable"><code>list</code></em> <code class="literal">::=</code> <code class="literal"><span class="bold"><strong>(</strong></span></code><a class="link" href="Datum-syntax.xhtml#meta-datum"><em class="replaceable"><code>datum</code></em></a>*<code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  41.          | <code class="literal"><span class="bold"><strong>(</strong></span></code><a class="link" href="Datum-syntax.xhtml#meta-datum"><em class="replaceable"><code>datum</code></em></a><sup>+</sup> <code class="literal"><span class="bold"><strong>.</strong></span></code> <a class="link" href="Datum-syntax.xhtml#meta-datum"><em class="replaceable"><code>datum</code></em></a><code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  42.          | <a class="link" href="Datum-syntax.xhtml#meta-abbreviation"><em class="replaceable"><code>abbreviation</code></em></a><br/>
  43. <a id="idm139667879490336" class="indexterm"/><span id="meta-vector"/><em class="replaceable"><code>vector</code></em> <code class="literal">::=</code> <code class="literal"><span class="bold"><strong>#(</strong></span></code><a class="link" href="Datum-syntax.xhtml#meta-datum"><em class="replaceable"><code>datum</code></em></a><sup>*</sup><code class="literal"><span class="bold"><strong>)</strong></span></code><br/>
  44. </p>
  45. </div>
  46. <span id="datum-labels"/>
  47. <section class="sect2" title="Datum labels" epub:type="division" id="idm139667879485216">
  48. <div class="titlepage">
  49. <div>
  50. <div>
  51. <h3 class="title">Datum labels</h3>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="literallayout">
  56. <p><a id="idm139667879484144" class="indexterm"/><span id="meta-datum-label"/><em class="replaceable"><code>datum-label</code></em> <code class="literal">::=</code> <code class="literal"><span class="bold"><strong>#</strong></span></code><a class="link" href="Datum-syntax.xhtml#meta-indexnum"><em class="replaceable"><code>indexnum</code></em></a><code class="literal"><span class="bold"><strong>=</strong></span></code><br/>
  57. <a id="idm139667879480032" class="indexterm"/><span id="meta-defining-datum"/><em class="replaceable"><code>defining-datum</code></em> <code class="literal">::=</code> <a class="link" href="Datum-syntax.xhtml#meta-datum-label"><em class="replaceable"><code>datum-label</code></em></a><sup>+</sup><a class="link" href="Datum-syntax.xhtml#meta-nondefining-datum"><em class="replaceable"><code>nondefining-datum</code></em></a><br/>
  58. <a id="idm139667879476288" class="indexterm"/><span id="meta-defined-datum"/><em class="replaceable"><code>defined-datum</code></em> <code class="literal">::=</code> <code class="literal"><span class="bold"><strong>#</strong></span></code><a class="link" href="Datum-syntax.xhtml#meta-indexnum"><em class="replaceable"><code>indexnum</code></em></a><code class="literal"><span class="bold"><strong>#</strong></span></code><br/>
  59. <a id="idm139667879472176" class="indexterm"/><span id="meta-indexnum"/><em class="replaceable"><code>indexnum</code></em> <code class="literal">::=</code> <a class="link" href="Lexical-syntax.xhtml#meta-digit"><em class="replaceable"><code>digit</code></em></a><sup>+</sup><br/>
  60. </p>
  61. </div>
  62. <p>The lexical syntax <code class="literal">#<em class="replaceable"><code>n</code></em>=<em class="replaceable"><code>datum</code></em></code> reads the
  63. same as <em class="replaceable"><code>datum</code></em>, but also results in <em class="replaceable"><code>datum</code></em> being
  64. labelled by <em class="replaceable"><code>n</code></em>, which must a sequence of digits.
  65. </p>
  66. <p>The lexical syntax <code class="literal">#<em class="replaceable"><code>n</code></em>#</code> serves as a reference to some
  67. object labelled by <code class="literal">#<em class="replaceable"><code>n</code></em>=</code>; the result is the same object
  68. (in the sense of <code class="literal">eq?</code>) as the <code class="literal">#<em class="replaceable"><code>n</code></em>=</code>.
  69. </p>
  70. <p>Together, these syntaxes permit the notation of structures
  71. with shared or circular substructure.
  72. </p>
  73. <pre class="screen">(let ((x (list 'a 'b 'c)))
  74. (set-cdr! (cddr x) x)
  75. x) ⇒ #0=(a b c . #0#)
  76. </pre>
  77. <p>The scope of a datum label is the portion of the outermost
  78. datum in which it appears that is to the right of the label.
  79. Consequently, a reference <code class="literal">#<em class="replaceable"><code>n</code></em>#</code> can occur
  80. only after a label <code class="literal">#<em class="replaceable"><code>n</code></em>=</code>;
  81. it is an error to attempt a forward reference.
  82. In addition, it is an error if the reference appears as the labelled
  83. object itself (as in <code class="literal">#<em class="replaceable"><code>n</code></em>=#<em class="replaceable"><code>n</code></em>#</code>), because the object
  84. labelled by <code class="literal">#<em class="replaceable"><code>n</code></em>=</code> is not well defined in this case.
  85. </p>
  86. </section>
  87. <section class="sect2" title="Abbreviations" epub:type="division" id="idm139667879457440">
  88. <div class="titlepage">
  89. <div>
  90. <div>
  91. <h3 class="title">Abbreviations</h3>
  92. </div>
  93. </div>
  94. </div>
  95. <div class="literallayout">
  96. <p><a id="idm139667879456368" class="indexterm"/><span id="meta-abbreviation"/><em class="replaceable"><code>abbreviation</code></em> <code class="literal">::=</code> <a class="link" href="Datum-syntax.xhtml#meta-r6rs-abbreviation"><em class="replaceable"><code>r6rs-abbreviation</code></em></a> | <a class="link" href="Datum-syntax.xhtml#meta-kawa-abbreviation"><em class="replaceable"><code>kawa-abbreviation</code></em></a><br/>
  97. <a id="idm139667879452752" class="indexterm"/><span id="meta-r6rs-abbreviation"/><em class="replaceable"><code>r6rs-abbreviation</code></em> <code class="literal">::=</code> <a class="link" href="Datum-syntax.xhtml#meta-abbrev-prefix"><em class="replaceable"><code>abbrev-prefix</code></em></a> <a class="link" href="Datum-syntax.xhtml#meta-datum"><em class="replaceable"><code>datum</code></em></a><br/>
  98. <a id="idm139667879449136" class="indexterm"/><span id="meta-abbrev-prefix"/><em class="replaceable"><code>abbrev-prefix</code></em> <code class="literal">::=</code> <code class="literal"><span class="bold"><strong>’</strong></span></code> | <code class="literal"><span class="bold"><strong>‘</strong></span></code> | <code class="literal"><span class="bold"><strong>,</strong></span></code> | <code class="literal"><span class="bold"><strong>,@</strong></span></code><br/>
  99.          | <code class="literal"><span class="bold"><strong>#’</strong></span></code> | <code class="literal"><span class="bold"><strong>#‘</strong></span></code><br/>
  100. <a id="idm139667879442288" class="indexterm"/><span id="meta-kawa-abbreviation"/><em class="replaceable"><code>kawa-abbreviation</code></em> <code class="literal">::=</code> XXX<br/>
  101. </p>
  102. </div>
  103. <p>The following abbreviations are expanded at read-time:
  104. </p>
  105. <div class="variablelist" epub:type="list">
  106. <dl class="variablelist">
  107. <dt class="term"><code class="literal"><span class="bold"><strong>’</strong></span></code><em class="replaceable"><code>datum</code></em>
  108. </dt>
  109. <dd>
  110. <p>means <code class="literal"><span class="bold"><strong>(quote</strong></span></code> <em class="replaceable"><code>datum</code></em><code class="literal"><span class="bold"><strong>)</strong></span></code>.
  111. </p>
  112. </dd>
  113. <dt class="term"><code class="literal"><span class="bold"><strong>‘</strong></span></code><em class="replaceable"><code>datum</code></em>
  114. </dt>
  115. <dd>
  116. <p>means <code class="literal"><span class="bold"><strong>(quasiquote</strong></span></code> <em class="replaceable"><code>datum</code></em><code class="literal"><span class="bold"><strong>)</strong></span></code>.
  117. </p>
  118. </dd>
  119. <dt class="term"><code class="literal"><span class="bold"><strong>,</strong></span></code><em class="replaceable"><code>datum</code></em>
  120. </dt>
  121. <dd>
  122. <p>means <code class="literal"><span class="bold"><strong>(unquote</strong></span></code> <em class="replaceable"><code>datum</code></em><code class="literal"><span class="bold"><strong>)</strong></span></code>.
  123. </p>
  124. </dd>
  125. <dt class="term"><code class="literal"><span class="bold"><strong>,@</strong></span></code><em class="replaceable"><code>datum</code></em>
  126. </dt>
  127. <dd>
  128. <p>means <code class="literal"><span class="bold"><strong>(unquote-splicing</strong></span></code> <em class="replaceable"><code>datum</code></em><code class="literal"><span class="bold"><strong>)</strong></span></code>.
  129. </p>
  130. </dd>
  131. <dt class="term"><code class="literal"><span class="bold"><strong>#’</strong></span></code><em class="replaceable"><code>datum</code></em>
  132. </dt>
  133. <dd>
  134. <p>means <code class="literal"><span class="bold"><strong>(syntax</strong></span></code> <em class="replaceable"><code>datum</code></em><code class="literal"><span class="bold"><strong>)</strong></span></code>.
  135. </p>
  136. </dd>
  137. <dt class="term"><code class="literal"><span class="bold"><strong>#‘</strong></span></code><em class="replaceable"><code>datum</code></em>
  138. </dt>
  139. <dd>
  140. <p>means <code class="literal"><span class="bold"><strong>(quasisyntax</strong></span></code> <em class="replaceable"><code>datum</code></em><code class="literal"><span class="bold"><strong>)</strong></span></code>.
  141. </p>
  142. </dd>
  143. <dt class="term"><code class="literal"><span class="bold"><strong>#,</strong></span></code><em class="replaceable"><code>datum</code></em>
  144. </dt>
  145. <dd>
  146. <p>means <code class="literal"><span class="bold"><strong>(unsyntax</strong></span></code> <em class="replaceable"><code>datum</code></em><code class="literal"><span class="bold"><strong>)</strong></span></code>.
  147. This abbreviation is currently only recognized when nested inside an explicit
  148. <code class="literal"><span class="bold"><strong>#‘</strong></span></code><em class="replaceable"><code>datum</code></em> form,
  149. because of a conflict with SRFI-10 named constructors.
  150. </p>
  151. </dd>
  152. <dt class="term"><code class="literal"><span class="bold"><strong>#,@</strong></span></code><em class="replaceable"><code>datum</code></em>
  153. </dt>
  154. <dd>
  155. <p>means <code class="literal"><span class="bold"><strong>(unsyntax-splicing</strong></span></code> <em class="replaceable"><code>datum</code></em><code class="literal"><span class="bold"><strong>)</strong></span></code>.
  156. </p>
  157. </dd>
  158. <dt class="term"><em class="replaceable"><code>datum1</code></em><code class="literal"><span class="bold"><strong>:</strong></span></code><em class="replaceable"><code>datum2</code></em>
  159. </dt>
  160. <dd>
  161. <p>means <code class="literal"><span class="bold"><strong>($lookup$</strong></span></code> <em class="replaceable"><code>datum1</code></em> <code class="literal"><span class="bold"><strong>(quasiquote</strong></span></code> <em class="replaceable"><code>datum2</code></em><code class="literal"><span class="bold"><strong>))</strong></span></code>.
  162. See <a class="link" href="Colon-notation.xhtml" title="Property access using colon notation">Colon notation</a>.
  163. </p>
  164. </dd>
  165. <dt class="term"><code class="literal"><span class="bold"><strong>[</strong></span></code><em class="replaceable"><code>expression</code></em> ...<code class="literal"><span class="bold"><strong>]</strong></span></code>
  166. </dt>
  167. <dd>
  168. <p>means <code class="literal"><span class="bold"><strong>($bracket-list$</strong></span></code> <em class="replaceable"><code>expression</code></em> ...<code class="literal"><span class="bold"><strong>)</strong></span></code>.
  169. </p>
  170. </dd>
  171. <dt class="term"><em class="replaceable"><code>operator</code></em><code class="literal"><span class="bold"><strong>[</strong></span></code><em class="replaceable"><code>expression</code></em> ...<code class="literal"><span class="bold"><strong>]</strong></span></code>
  172. </dt>
  173. <dd>
  174. <p>means <code class="literal"><span class="bold"><strong>($bracket-apply$</strong></span></code> <em class="replaceable"><code>operator</code></em> <em class="replaceable"><code>expression</code></em> ...<code class="literal"><span class="bold"><strong>)</strong></span></code>.
  175. </p>
  176. </dd>
  177. </dl>
  178. </div>
  179. </section>
  180. </section>
  181. <footer>
  182. <div class="navfooter">
  183. <ul>
  184. <li>
  185. <b class="toc">
  186. <a href="Datum-syntax.xhtml#idm139667879485216">Datum labels</a>
  187. </b>
  188. </li>
  189. <li>
  190. <b class="toc">
  191. <a href="Datum-syntax.xhtml#idm139667879457440">Abbreviations</a>
  192. </b>
  193. </li>
  194. </ul>
  195. <p>
  196. Up: <a accesskey="u" href="Syntax.xhtml">Syntax</a></p>
  197. <p>
  198. Previous: <a accesskey="p" href="Lexical-syntax.xhtml">Lexical syntax</a></p>
  199. <p>
  200. Next: <a accesskey="n" href="Hash-prefixed-forms.xhtml">Hash-prefixed forms</a></p>
  201. </div>
  202. </footer>
  203. </body>
  204. </html>