<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4011</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PolicyScript</anchor>) は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EBNF</anchor>
で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PolicyScript</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<anchor>C++</anchor> の部分集合)</weak> を定義しています。</p><p>仕様書:<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 4011</anchor> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="urn:ietf:rfc:4011" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">urn:ietf:rfc:4011</anchor-external><ul><li>5. </li></ul></li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end>
RFC 4011 で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">英語</anchor>で記述された説明に基づく RFC 4011
の EBNF の構文:<ul><li><code class="ABNF"><dfn>終端</dfn> := &quot;'&quot; 1*&lt;<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor> 文字集合の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>&gt; &quot;'&quot; / &quot;&lt;&quot; 1*&lt;説明する語句: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor> 文字集合の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>&gt; &quot;&gt;&quot;</code></li><li><code class="ABNF"><dfn>非終端</dfn> := 1*(letter / &quot;_&quot;)</code></li><li><code class="ABNF"><dfn>生成規則</dfn> := 非終端 &quot;:&quot; 定義</code></li><li><code class="ABNF"><dfn>注釈</dfn> := &quot;--&quot; 注釈内容 改行</code></li></ul></p><p>定義の中で:<dl><dt><code>|</code></dt><dd>選択</dd><dt><code>(<var>・・・</var>)</code></dt><dd>集団化</dd><dt><code><strong>[</strong><var>・・・</var><strong>]</strong></code></dt><dd>省略可能</dd><dt><code><var>項目</var>?</code></dt><dd>省略可能</dd><dt><code><var>項目</var>*</code></dt><dd>零個以上</dd><dt><code><var>項目</var>+</code></dt><dd>一個以上</dd></dl></p><p>明確に説明されているのはこれだけで、自明だと思って説明しなかったのでしょうが、
途中に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>を自由に挿入できるなどの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">BNF</anchor> 
各種で一般的な規則を採用しています。</p><p>実例を見ると、終端表記ではアポストロフィ1つを表すのに
<samp><strong>]] と平気で書いています。 <code>&lt;</code> と
<code>&gt;</code> を使った終端は <samp>&lt;TAB&gt;</samp> のように制御文字の表現に使われています。
<code class="ABNF">定義</code>に記号を一切使わずに直接英語で説明しているものもあったりします。</strong></samp></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 使用例 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">[RFC 4011</src><pre class="example">   hex_constant:      ( '0x' | '0X' ) hex_digit+

   integer_constant:  decimal_constant | octal_constant | hex_constant

   identifier:        letter ( letter | digit )*

<code class="comment">-- Phrase Structure Grammar</code>

   <code class="comment">-- Expressions</code>

   primary_expr:      identifier | integer_constant | char_constant
                    | string_literal  |  '(' expression ')'</pre></p></body></html>