iXML Community Group Test Suite

23 Oct 2023 (22 Nov 2023)

Top-level catalog for tests in the iXML Community Group Test Suite.

Tests have been contributed from several sources, but the core of the test collection are the tests contributed by Steven Pemberton in December 2021.

ixml tests

01 Jun 2022

Tests provided by Steven Pemberton in December 2021, with corrections of 21 December. Reorganized by Norm Tovey-Walsh, February 2022.

bnf

Created 16 Dec 2021 by SP

Invisible XML Grammar

ixml: S, rules.
-rules: rule; rule, rules.
rule: mark, name, S, -"::=", S, def;
      name, S, -"::=", S, def.
def: alts.
-alts: alt; alt, -"|", S, alts.
alt: terms; empty.
-terms: term; term, terms.
empty: .
term: mark, name, S; name, S; string, S; range.
@name: -"<", letters, -">".
@mark: "@", S; "^", S; "-", S.
letters: letter, more-letters.
letter: ["a"-"z"]; ["A"-"Z"]; ["0"-"9"].
more-letters: letter, more-letters; "-", more-letters; .
@string: -"""", chars, -"""".
chars: char, chars; char.
char: [" "-"!"]; ["#"-"~"]; -'"', '"'. {all characters, quotes must be doubled}
range: -"[", S,  from, S, -"-", S, to, S, -"]", S.
@from: character.
@to: character.
-character: -"""", char, -""""; -"""", """", -"""", -"""".
-S: -[" "; #a; #d], S; comment, S; .
comment: "{", schars, "}".
-schars: schar, schars; .
-schar: [" "-"|"]; "~". {Everything except: }

Test case: bnf

Repository URI: …/tests/ixml/test-catalog.xml

Created 16 Dec 2021 by SP

Updated 01 Jan 2022 by MSM

stripped non-significant whitespace from result

Input string (969 characters)

<ixml>::= <S> <rules>
-<rules>::= <rule> | <rule> <rules>
<rule>::= <mark> <name> "::=" <S> <def> |
      <name> "::=" <S> <def>
<def>::= <alts>
-<alts>::= <alt> | <alt> "|" <S> <alts>
<alt>::= <terms> | <empty>
-<terms>::= <term> | <term> <S> <terms>
<empty>::= 
<term>::= <mark> <name> | <name> | <string> | <range>
@<name>::= "<" <letters> ">" <S>
@<mark>::= "@" <S> | "^" <S> | "-" <S>
<letters>::= <letter> <more-letters>
<letter>::= ["a"-"z"] | ["A"-"Z"] | ["0"-"9"]
<more-letters>::= <letter> <more-letters> | "-" <more-letters> | <empty>
@<string>::= """" <chars> """" <S>
<chars>::= <char> <chars> | <char>
<char>::= [" "-"!"] | ["#"-"~"] | """""" {all characters, quotes must be doubled}
<range>::= "[" <S>  <character> <S> "-" <S> <character> <S> "]" <S>
-<character>::= """" <char> """" | """" """" """" """"
-<S>::= " " <S> | <comment> <S> | 
<comment>::= "{" <schars> "}"
-<schars>::= <schar> <schars> | 
-<schar>::= [" "-"|"] | "~" {Everything except: }

Expected result

<ixml>
   <rule name="ixml">
      <def>
         <alt>
            <term name="S"/>
            <term name="rules"/>
         </alt>
      </def>
   </rule>
   <rule mark="-" name="rules">
      <def>
         <alt>
            <term name="rule"/>
         </alt>
         <alt>
            <term name="rule"/>
            <term name="rules"/>
         </alt>
      </def>
   </rule>
   <rule name="rule">
      <def>
         <alt>
            <term name="mark"/>
            <term name="name"/>
            <term string="::="/>
            <term name="S"/>
            <term name="def"/>
         </alt>
         <alt>
            <term name="name"/>
            <term string="::="/>
            <term name="S"/>
            <term name="def"/>
         </alt>
      </def>
   </rule>
   <rule name="def">
      <def>
         <alt>
            <term name="alts"/>
         </alt>
      </def>
   </rule>
   <rule mark="-" name="alts">
      <def>
         <alt>
            <term name="alt"/>
         </alt>
         <alt>
            <term name="alt"/>
            <term string="|"/>
            <term name="S"/>
            <term name="alts"/>
         </alt>
      </def>
   </rule>
   <rule name="alt">
      <def>
         <alt>
            <term name="terms"/>
         </alt>
         <alt>
            <term name="empty"/>
         </alt>
      </def>
   </rule>
   <rule mark="-" name="terms">
      <def>
         <alt>
            <term name="term"/>
         </alt>
         <alt>
            <term name="term"/>
            <term name="S"/>
            <term name="terms"/>
         </alt>
      </def>
   </rule>
   <rule name="empty">
      <def>
         <alt>
            <empty/>
         </alt>
      </def>
   </rule>
   <rule name="term">
      <def>
         <alt>
            <term name="mark"/>
            <term name="name"/>
         </alt>
         <alt>
            <term name="name"/>
         </alt>
         <alt>
            <term name="string"/>
         </alt>
         <alt>
            <term name="range"/>
         </alt>
      </def>
   </rule>
   <rule mark="@" name="name">
      <def>
         <alt>
            <term string="&lt;"/>
            <term name="letters"/>
            <term string="&gt;"/>
            <term name="S"/>
         </alt>
      </def>
   </rule>
   <rule mark="@" name="mark">
      <def>
         <alt>
            <term string="@"/>
            <term name="S"/>
         </alt>
         <alt>
            <term string="^"/>
            <term name="S"/>
         </alt>
         <alt>
            <term string="-"/>
            <term name="S"/>
         </alt>
      </def>
   </rule>
   <rule name="letters">
      <def>
         <alt>
            <term name="letter"/>
            <term name="more-letters"/>
         </alt>
      </def>
   </rule>
   <rule name="letter">
      <def>
         <alt>
            <term>
               <range from="a" to="z"/>
            </term>
         </alt>
         <alt>
            <term>
               <range from="A" to="Z"/>
            </term>
         </alt>
         <alt>
            <term>
               <range from="0" to="9"/>
            </term>
         </alt>
      </def>
   </rule>
   <rule name="more-letters">
      <def>
         <alt>
            <term name="letter"/>
            <term name="more-letters"/>
         </alt>
         <alt>
            <term string="-"/>
            <term name="more-letters"/>
         </alt>
         <alt>
            <term name="empty"/>
         </alt>
      </def>
   </rule>
   <rule mark="@" name="string">
      <def>
         <alt>
            <term string="&#34;"/>
            <term name="chars"/>
            <term string="&#34;"/>
            <term name="S"/>
         </alt>
      </def>
   </rule>
   <rule name="chars">
      <def>
         <alt>
            <term name="char"/>
            <term name="chars"/>
         </alt>
         <alt>
            <term name="char"/>
         </alt>
      </def>
   </rule>
   <rule name="char">
      <def>
         <alt>
            <term>
               <range from=" " to="!"/>
            </term>
         </alt>
         <alt>
            <term>
               <range from="#" to="~"/>
            </term>
         </alt>
         <alt>
            <term string="&#34;&#34;">
               <comment>{all characters, quotes must be doubled}</comment>
            </term>
         </alt>
      </def>
   </rule>
   <rule name="range">
      <def>
         <alt>
            <term string="["/>
            <term name="S"/>
            <term name="character"/>
            <term name="S"/>
            <term string="-"/>
            <term name="S"/>
            <term name="character"/>
            <term name="S"/>
            <term string="]"/>
            <term name="S"/>
         </alt>
      </def>
   </rule>
   <rule mark="-" name="character">
      <def>
         <alt>
            <term string="&#34;"/>
            <term name="char"/>
            <term string="&#34;"/>
         </alt>
         <alt>
            <term string="&#34;"/>
            <term string="&#34;"/>
            <term string="&#34;"/>
            <term string="&#34;"/>
         </alt>
      </def>
   </rule>
   <rule mark="-" name="S">
      <def>
         <alt>
            <term string=" "/>
            <term name="S"/>
         </alt>
         <alt>
            <term name="comment"/>
            <term name="S"/>
         </alt>
         <alt>
            <empty/>
         </alt>
      </def>
   </rule>
   <rule name="comment">
      <def>
         <alt>
            <term string="{"/>
            <term name="schars"/>
            <term string="}"/>
         </alt>
      </def>
   </rule>
   <rule mark="-" name="schars">
      <def>
         <alt>
            <term name="schar"/>
            <term name="schars"/>
         </alt>
         <alt>
            <empty/>
         </alt>
      </def>
   </rule>
   <rule mark="-" name="schar">
      <def>
         <alt>
            <term>
               <range from=" " to="|"/>
            </term>
         </alt>
         <alt>
            <term string="~">
               <comment>{Everything except: }</comment>
            </term>
         </alt>
      </def>
   </rule>
</ixml>