Current section
Files
Jump to
Current section
Files
priv/imap_grammar.xml
<?xml version="1.0" encoding="US-ASCII"?>
<grammar xmlns="http://elixir.parserbuilder.com/v1.1.0">
<!-- Testing -->
<rule id="test_conversation1">
<oneOf>
<item>
<tag name="xx_partial">
<literal value="partial"/>
</tag>
</item>
<item>
<tag name="xx_final">
<literal value="final"/>
</tag>
</item>
</oneOf>
</rule>
<!-- Testing -->
<!-- Convenience -->
<rule id="conversation">
<oneOf>
<item>
<tag name="xx_partial">
<untagAndFlatten>
<ruleRef uri="continue"/>
</untagAndFlatten>
</tag>
</item>
<item>
<tag name="xx_final">
<ruleRef uri="response"/>
</tag>
</item>
</oneOf>
</rule>
<rule id="greeting" postprocess="tag">
<ruleRef uri="rfc3501_greeting"/>
</rule>
<rule id="response">
<ruleRef uri="rfc3501_response-only"/>
</rule>
<rule id="continue">
<ruleRef uri="rfc3501_continue-req"/>
</rule>
<!-- Convenience -->
<!-- RFC 3501 -->
<rule id="rfc3501_address">
<tag name="xx_key_value_map">
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_addr-name"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_addr-adl"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_addr-mailbox"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_addr-host"/>
<ignore>
<literal value=")"/>
</ignore>
</tag>
</rule>
<rule id="rfc3501_addr-adl">
<tag name="adl">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_addr-host">
<tag name="host">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_addr-mailbox">
<tag name="mailbox">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_addr-name">
<tag name="name">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_append" postprocess="tag">
<ignore>
<literal value="APPEND"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_flag-list"/>
</optional>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_date-time"/>
</optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_literal"/>
</rule>
<rule id="rfc3501_astring">
<untagAndFlatten>
<oneOf>
<item>
<manyOne>
<ruleRef uri="rfc3501_ASTRING-CHAR"/>
</manyOne>
</item>
<item>
<ruleRef uri="rfc3501_string"/>
</item>
</oneOf>
</untagAndFlatten>
</rule>
<rule id="rfc3501_ASTRING-CHAR">
<oneOf>
<item>
<ruleRef uri="rfc3501_ATOM-CHAR"/>
</item>
<item>
<ruleRef uri="rfc3501_resp-specials"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_atom">
<untagAndFlatten>
<manyOne>
<ruleRef uri="rfc3501_ATOM-CHAR"/>
</manyOne>
</untagAndFlatten>
</rule>
<rule id="rfc3501_ATOM-CHAR">
<!--any CHAR except atom-specials-->
<oneOf>
<item>
<hexValue value="21"/>
</item>
<item>
<hexRange start="23" end="24"/>
</item>
<item>
<hexRange start="26" end="27"/>
</item>
<item>
<hexRange start="2B" end="5B"/>
</item>
<item>
<hexRange start="5E" end="7A"/>
</item>
<item>
<hexRange start="7C" end="7E"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_atom-specials">
<oneOf>
<item>
<literal value="("/>
</item>
<item>
<literal value=")"/>
</item>
<item>
<literal value="{"/>
</item>
<item>
<ruleRef uri="SP"/>
</item>
<item>
<ruleRef uri="CTL"/>
</item>
<item>
<ruleRef uri="rfc3501_list-wildcards"/>
</item>
<item>
<ruleRef uri="rfc3501_quoted-specials"/>
</item>
<item>
<ruleRef uri="rfc3501_resp-specials"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_authenticate" postprocess="tag">
<ignore>
<literal value="AUTHENTICATE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_auth-type"/>
<many>
<ruleRef uri="CRLF"/>
<ruleRef uri="rfc3501_base64"/>
</many>
</rule>
<rule id="rfc3501_auth-type" postprocess="tag">
<ruleRef uri="rfc3501_atom"/>
</rule>
<rule id="rfc3501_base64" postprocess="tag">
<many>
<exactly count="4">
<ruleRef uri="rfc3501_base64-char"/>
</exactly>
</many>
<optional>
<ruleRef uri="rfc3501_base64-terminal"/>
</optional>
</rule>
<rule id="rfc3501_base64-char" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="ALPHA"/>
</item>
<item>
<ruleRef uri="DIGIT"/>
</item>
<item>
<literal value="+"/>
</item>
<item>
<literal value="/"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_base64-terminal" postprocess="tag">
<oneOf>
<item>
<exactly count="2">
<ruleRef uri="rfc3501_base64-char"/>
</exactly>
<literal value="=="/>
</item>
<item>
<exactly count="3">
<ruleRef uri="rfc3501_base64-char"/>
</exactly>
<literal value="="/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_body">
<ignore>
<literal value="("/>
</ignore>
<oneOf>
<item>
<ruleRef uri="rfc3501_body-type-1part"/>
</item>
<item>
<ruleRef uri="rfc3501_body-type-mpart"/>
</item>
</oneOf>
<ignore>
<literal value=")"/>
</ignore>
</rule>
<rule id="rfc3501_body-extension" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_nstring"/>
</item>
<item>
<ruleRef uri="rfc3501_number"/>
</item>
<item>
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_body-extension"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-extension"/>
</many>
<ignore>
<literal value=")"/>
</ignore>
</item>
</oneOf>
</rule>
<rule id="rfc3501_body-ext-1part" postprocess="tag">
<ruleRef uri="rfc3501_body-fld-md5"/>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-dsp"/>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-lang"/>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-loc"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-extension"/>
</many>
</optional>
</optional>
</optional>
</rule>
<rule id="rfc3501_body-ext-mpart" postprocess="tag">
<ruleRef uri="rfc3501_body-fld-param"/>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-dsp"/>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-lang"/>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-loc"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-extension"/>
</many>
</optional>
</optional>
</optional>
</rule>
<rule id="rfc3501_body-fields">
<ruleRef uri="rfc3501_body-fld-param"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-id"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-desc"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-enc"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-octets"/>
</rule>
<rule id="rfc3501_body-fld-desc">
<tag name="desc">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_body-fld-dsp">
<tag name="dsp">
<oneOf>
<item>
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_string"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-param"/>
<ignore>
<literal value=")"/>
</ignore>
</item>
<item>
<ruleRef uri="rfc3501_nil"/>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_body-fld-enc">
<tag name="enc">
<oneOf>
<item>
<ruleRef uri="DQUOTE"/>
<oneOf>
<item>
<literal value="7BIT"/>
</item>
<item>
<literal value="8BIT"/>
</item>
<item>
<literal value="BINARY"/>
</item>
<item>
<literal value="BASE64"/>
</item>
<item>
<literal value="QUOTED-PRINTABLE"/>
</item>
</oneOf>
<ruleRef uri="DQUOTE"/>
</item>
<item>
<ruleRef uri="rfc3501_string"/>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_body-fld-id">
<tag name="id">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_body-fld-lang">
<tag name="lang">
<oneOf>
<item>
<ruleRef uri="rfc3501_nstring"/>
</item>
<item>
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_string"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_string"/>
</many>
<ignore>
<literal value=")"/>
</ignore>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_body-fld-loc">
<tag name="loc">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_body-fld-lines">
<tag name="lines">
<ruleRef uri="rfc3501_number"/>
</tag>
</rule>
<rule id="rfc3501_body-fld-md5">
<tag name="md5">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_body-fld-octets">
<tag name="octets">
<ruleRef uri="rfc3501_number"/>
</tag>
</rule>
<rule id="rfc3501_body-fld-param">
<tag name="param">
<oneOf>
<item>
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_key_value_pair"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_key_value_pair"/>
</many>
<ignore>
<literal value=")"/>
</ignore>
</item>
<item>
<ruleRef uri="rfc3501_nil"/>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_body-type-1part">
<oneOf>
<item>
<ruleRef uri="rfc3501_body-type-basic"/>
</item>
<item>
<ruleRef uri="rfc3501_body-type-msg"/>
</item>
<item>
<ruleRef uri="rfc3501_body-type-text"/>
</item>
</oneOf>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-ext-1part"/>
</optional>
</rule>
<rule id="rfc3501_body-type-basic">
<tag name="xx_key_value_map">
<ruleRef uri="rfc3501_media-basic"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fields"/>
</tag>
</rule>
<rule id="rfc3501_body-type-mpart">
<tag name="xx_key_value_map">
<tag name="parts">
<manyOne>
<ruleRef uri="rfc3501_body"/>
</manyOne>
</tag>
<ruleRef uri="SP"/>
<tag name="media-subtype">
<ruleRef uri="rfc3501_media-subtype"/>
</tag>
<optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-ext-mpart"/>
</optional>
</tag>
</rule>
<rule id="rfc3501_body-type-msg">
<tag name="xx_key_value_map">
<ruleRef uri="rfc3501_media-message"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fields"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_envelope"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-lines"/>
</tag>
</rule>
<rule id="rfc3501_body-type-text">
<tag name="xx_key_value_map">
<ruleRef uri="rfc3501_media-text"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fields"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-fld-lines"/>
</tag>
</rule>
<rule id="rfc3501_capability">
<oneOf>
<item>
<tag name="auth-type">
<ignore>
<literal value="AUTH="/>
</ignore>
<untagAndFlatten>
<ruleRef uri="rfc3501_auth-type"/>
</untagAndFlatten>
</tag>
</item>
<item>
<tag name="capability">
<ruleRef uri="rfc3501_atom"/>
</tag>
</item>
</oneOf>
</rule>
<rule id="rfc3501_capability-data">
<tag name="capabilities">
<tag name="xx_key_value_map">
<ignore>
<literal value="CAPABILITY"/>
</ignore>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_capability"/>
</many>
<ruleRef uri="SP"/>
<ignore>
<literal value="IMAP4rev1"/>
</ignore>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_capability"/>
</many>
</tag>
</tag>
</rule>
<rule id="rfc3501_CHAR8" postprocess="tag">
<hexRange start="01" end="ff"/>
</rule>
<rule id="rfc3501_command" postprocess="tag">
<ruleRef uri="rfc3501_tag"/>
<ruleRef uri="SP"/>
<oneOf>
<item>
<ruleRef uri="rfc3501_command-any"/>
</item>
<item>
<ruleRef uri="rfc3501_command-auth"/>
</item>
<item>
<ruleRef uri="rfc3501_command-nonauth"/>
</item>
<item>
<ruleRef uri="rfc3501_command-select"/>
</item>
</oneOf>
<ruleRef uri="CRLF"/>
</rule>
<rule id="rfc3501_command-any" postprocess="tag">
<oneOf>
<item>
<ignore>
<literal value="CAPABILITY"/>
</ignore>
</item>
<item>
<ignore>
<literal value="LOGOUT"/>
</ignore>
</item>
<item>
<ignore>
<literal value="NOOP"/>
</ignore>
</item>
<item>
<ruleRef uri="rfc3501_x-command"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_command-auth" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_append"/>
</item>
<item>
<ruleRef uri="rfc3501_create"/>
</item>
<item>
<ruleRef uri="rfc3501_delete"/>
</item>
<item>
<ruleRef uri="rfc3501_examine"/>
</item>
<item>
<ruleRef uri="rfc3501_list"/>
</item>
<item>
<ruleRef uri="rfc3501_lsub"/>
</item>
<item>
<ruleRef uri="rfc3501_rename"/>
</item>
<item>
<ruleRef uri="rfc3501_select"/>
</item>
<item>
<ruleRef uri="rfc3501_status"/>
</item>
<item>
<ruleRef uri="rfc3501_subscribe"/>
</item>
<item>
<ruleRef uri="rfc3501_unsubscribe"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_command-nonauth" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_login"/>
</item>
<item>
<ruleRef uri="rfc3501_authenticate"/>
</item>
<item>
<ignore>
<literal value="STARTTLS"/>
</ignore>
</item>
</oneOf>
</rule>
<rule id="rfc3501_command-select" postprocess="tag">
<oneOf>
<item>
<ignore>
<literal value="CHECK"/>
</ignore>
</item>
<item>
<ignore>
<literal value="CLOSE"/>
</ignore>
</item>
<item>
<ignore>
<literal value="EXPUNGE"/>
</ignore>
</item>
<item>
<ruleRef uri="rfc3501_copy"/>
</item>
<item>
<ruleRef uri="rfc3501_fetch"/>
</item>
<item>
<ruleRef uri="rfc3501_store"/>
</item>
<item>
<ruleRef uri="rfc3501_uid"/>
</item>
<item>
<ruleRef uri="rfc3501_search"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_continue-req" postprocess="tag">
<ignore>
<literal value="+"/>
</ignore>
<ruleRef uri="SP"/>
<oneOf>
<item>
<ruleRef uri="rfc3501_resp-text"/>
</item>
<item>
<ruleRef uri="rfc3501_base64"/>
</item>
</oneOf>
<ruleRef uri="CRLF"/>
</rule>
<rule id="rfc3501_copy" postprocess="tag">
<ignore>
<literal value="COPY"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_sequence-set"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</rule>
<rule id="rfc3501_create" postprocess="tag">
<ignore>
<literal value="CREATE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</rule>
<rule id="rfc3501_date" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_date-text"/>
</item>
<item>
<ruleRef uri="DQUOTE"/>
<ruleRef uri="rfc3501_date-text"/>
<ruleRef uri="DQUOTE"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_date-day" postprocess="tag">
<repeat min="1" max="2">
<ruleRef uri="DIGIT"/>
</repeat>
</rule>
<rule id="rfc3501_date-day-fixed">
<tag name="xx_number">
<untagAndFlatten>
<oneOf>
<item>
<ruleRef uri="SP"/>
<ruleRef uri="DIGIT"/>
</item>
<item>
<exactly count="2">
<ruleRef uri="DIGIT"/>
</exactly>
</item>
</oneOf>
</untagAndFlatten>
</tag>
</rule>
<rule id="rfc3501_date-month" postprocess="tag">
<oneOf>
<item>
<literal value="Jan"/>
</item>
<item>
<literal value="Feb"/>
</item>
<item>
<literal value="Mar"/>
</item>
<item>
<literal value="Apr"/>
</item>
<item>
<literal value="May"/>
</item>
<item>
<literal value="Jun"/>
</item>
<item>
<literal value="Jul"/>
</item>
<item>
<literal value="Aug"/>
</item>
<item>
<literal value="Sep"/>
</item>
<item>
<literal value="Oct"/>
</item>
<item>
<literal value="Nov"/>
</item>
<item>
<literal value="Dec"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_date-text" postprocess="tag">
<ruleRef uri="rfc3501_date-day"/>
<ignore>
<literal value="-"/>
</ignore>
<ruleRef uri="rfc3501_date-month"/>
<ignore>
<literal value="-"/>
</ignore>
<ruleRef uri="rfc3501_date-year"/>
</rule>
<rule id="rfc3501_date-year">
<tag name="xx_number">
<untagAndFlatten>
<exactly count="4">
<ruleRef uri="DIGIT"/>
</exactly>
</untagAndFlatten>
</tag>
</rule>
<rule id="rfc3501_date-time" postprocess="tag">
<ruleRef uri="DQUOTE"/>
<ruleRef uri="rfc3501_date-day-fixed"/>
<ignore>
<literal value="-"/>
</ignore>
<ruleRef uri="rfc3501_date-month"/>
<ignore>
<literal value="-"/>
</ignore>
<ruleRef uri="rfc3501_date-year"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_time"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_zone"/>
</rule>
<rule id="rfc3501_delete" postprocess="tag">
<ignore>
<literal value="DELETE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</rule>
<rule id="DIGIT-nz" postprocess="tag">
<hexRange start="31" end="39"/>
</rule>
<rule id="rfc3501_envelope">
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_env-date"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-subject"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-from"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-sender"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-reply-to"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-to"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-cc"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-bcc"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-in-reply-to"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_env-message-id"/>
<ignore>
<literal value=")"/>
</ignore>
</rule>
<rule id="rfc3501_env-bcc">
<tag name="bcc">
<ruleRef uri="rfc3501_env-addresses"/>
</tag>
</rule>
<rule id="rfc3501_env-cc">
<tag name="cc">
<ruleRef uri="rfc3501_env-addresses"/>
</tag>
</rule>
<rule id="rfc3501_env-date">
<tag name="date">
<oneOf>
<item>
<ruleRef uri="DQUOTE"/>
<ruleRef uri="aux_env-date"/>
<ruleRef uri="DQUOTE"/>
</item>
<item>
<ruleRef uri="rfc3501_nstring"/>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_env-from">
<tag name="from">
<ruleRef uri="rfc3501_env-addresses"/>
</tag>
</rule>
<rule id="rfc3501_env-in-reply-to">
<tag name="in-reply-to">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_env-message-id">
<tag name="message-id">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_env-reply-to">
<tag name="reply-to">
<ruleRef uri="rfc3501_env-addresses"/>
</tag>
</rule>
<rule id="rfc3501_env-sender">
<tag name="sender">
<ruleRef uri="rfc3501_env-addresses"/>
</tag>
</rule>
<rule id="rfc3501_env-subject">
<tag name="subject">
<ruleRef uri="rfc3501_nstring"/>
</tag>
</rule>
<rule id="rfc3501_env-to">
<tag name="to">
<ruleRef uri="rfc3501_env-addresses"/>
</tag>
</rule>
<rule id="rfc3501_examine" postprocess="tag">
<ignore>
<literal value="EXAMINE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</rule>
<rule id="rfc3501_fetch" postprocess="tag">
<ignore>
<literal value="FETCH"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_sequence-set"/>
<ruleRef uri="SP"/>
<oneOf>
<item>
<ignore>
<literal value="ALL"/>
</ignore>
</item>
<item>
<ignore>
<literal value="FULL"/>
</ignore>
</item>
<item>
<ignore>
<literal value="FAST"/>
</ignore>
</item>
<item>
<ruleRef uri="rfc3501_fetch-att"/>
</item>
<item>
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_fetch-att"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_fetch-att"/>
</many>
<ignore>
<literal value=")"/>
</ignore>
</item>
</oneOf>
</rule>
<rule id="rfc3501_fetch-att" postprocess="tag">
<oneOf>
<item>
<ignore>
<literal value="ENVELOPE"/>
</ignore>
</item>
<item>
<ignore>
<literal value="FLAGS"/>
</ignore>
</item>
<item>
<ignore>
<literal value="INTERNALDATE"/>
</ignore>
</item>
<item>
<ignore>
<literal value="RFC822"/>
</ignore>
<optional>
<oneOf>
<item>
<ignore>
<literal value=".HEADER"/>
</ignore>
</item>
<item>
<ignore>
<literal value=".SIZE"/>
</ignore>
</item>
<item>
<ignore>
<literal value=".TEXT"/>
</ignore>
</item>
</oneOf>
</optional>
</item>
<item>
<ignore>
<literal value="BODY"/>
</ignore>
<optional>
<ignore>
<literal value="STRUCTURE"/>
</ignore>
</optional>
</item>
<item>
<ignore>
<literal value="UID"/>
</ignore>
</item>
<item>
<ignore>
<literal value="BODY"/>
</ignore>
<ruleRef uri="rfc3501_section"/>
<optional>
<ignore>
<literal value="<"/>
</ignore>
<ruleRef uri="rfc3501_number"/>
<literal value="."/>
<ruleRef uri="rfc3501_nz-number"/>
<ignore>
<literal value=">"/>
</ignore>
</optional>
</item>
<item>
<ignore>
<literal value="BODY.PEEK"/>
</ignore>
<ruleRef uri="rfc3501_section"/>
<optional>
<ignore>
<literal value="<"/>
</ignore>
<ruleRef uri="rfc3501_number"/>
<literal value="."/>
<ruleRef uri="rfc3501_nz-number"/>
<ignore>
<literal value=">"/>
</ignore>
</optional>
</item>
</oneOf>
</rule>
<rule id="rfc3501_flag">
<oneOf>
<item>
<replace value="Answered">
<literal value="\Answered"/>
</replace>
</item>
<item>
<replace value="Flagged">
<literal value="\Flagged"/>
</replace>
</item>
<item>
<replace value="Deleted">
<literal value="\Deleted"/>
</replace>
</item>
<item>
<replace value="Seen">
<literal value="\Seen"/>
</replace>
</item>
<item>
<replace value="Draft">
<literal value="\Draft"/>
</replace>
</item>
<item>
<ruleRef uri="rfc3501_flag-keyword"/>
</item>
<item>
<ruleRef uri="rfc3501_flag-extension"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_flag-extension" postprocess="tag">
<ruleRef uri="rfc3501_flag-extension-tagless"/>
</rule>
<rule id="rfc3501_flag-fetch" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_flag"/>
</item>
<item>
<replace value="Recent">
<literal value="\Recent"/>
</replace>
</item>
</oneOf>
</rule>
<rule id="rfc3501_flag-keyword">
<ruleRef uri="rfc3501_atom"/>
</rule>
<rule id="rfc3501_flag-list">
<tag name="flags">
<ignore>
<literal value="("/>
</ignore>
<optional>
<ruleRef uri="rfc3501_flag"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_flag"/>
</many>
</optional>
<ignore>
<literal value=")"/>
</ignore>
</tag>
</rule>
<rule id="rfc3501_flag-perm" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_flag"/>
</item>
<item>
<literal value="\*"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_greeting" postprocess="tag">
<ignore>
<literal value="*"/>
</ignore>
<ruleRef uri="SP"/>
<oneOf>
<item>
<ruleRef uri="rfc3501_resp-cond-auth-prefix"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_resp-text-tagless"/>
</item>
<item>
<ruleRef uri="rfc3501_resp-cond-bye"/>
</item>
</oneOf>
<ruleRef uri="CRLF"/>
</rule>
<rule id="rfc3501_header-fld-name" postprocess="tag">
<ruleRef uri="rfc3501_astring"/>
</rule>
<rule id="rfc3501_header-list" postprocess="tag">
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_header-fld-name"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_header-fld-name"/>
</many>
<ignore>
<literal value=")"/>
</ignore>
</rule>
<rule id="rfc3501_list" postprocess="tag">
<ignore>
<literal value="LIST"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_list-mailbox"/>
</rule>
<rule id="rfc3501_list-mailbox" postprocess="tag">
<oneOf>
<item>
<manyOne>
<ruleRef uri="rfc3501_list-char"/>
</manyOne>
</item>
<item>
<ruleRef uri="rfc3501_string"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_list-char" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_ATOM-CHAR"/>
</item>
<item>
<ruleRef uri="rfc3501_list-wildcards"/>
</item>
<item>
<ruleRef uri="rfc3501_resp-specials"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_list-wildcards" postprocess="tag">
<oneOf>
<item>
<ignore>
<literal value="%"/>
</ignore>
</item>
<item>
<ignore>
<literal value="*"/>
</ignore>
</item>
</oneOf>
</rule>
<rule id="rfc3501_literal" postprocess="tag">
<untagAndFlatten>
<exactlyPi>
<count>
<ignore>
<literal value="{"/>
</ignore>
<untagAndFlatten>
<ruleRef uri="rfc3501_number"/>
</untagAndFlatten>
<ignore>
<literal value="}"/>
<ruleRef uri="CRLF"/>
</ignore>
</count>
<applyTo>
<untagAndFlatten>
<ruleRef uri="rfc3501_CHAR8"/>
</untagAndFlatten>
</applyTo>
</exactlyPi>
</untagAndFlatten>
</rule>
<rule id="rfc3501_login" postprocess="tag">
<ignore>
<literal value="LOGIN"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_userid"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_password"/>
</rule>
<rule id="rfc3501_lsub" postprocess="tag">
<ignore>
<literal value="LSUB"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_list-mailbox"/>
</rule>
<rule id="rfc3501_mailbox">
<tag name="mailbox">
<oneOf>
<item>
<replace value="INBOX">
<literal value="INBOX"/>
</replace>
</item>
<item>
<ruleRef uri="rfc3501_astring"/>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_mailbox-data">
<oneOf>
<item>
<ignore>
<literal value="FLAGS"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_flag-list"/>
</item>
<item>
<ignore>
<literal value="LIST"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox-list"/>
</item>
<item>
<ignore>
<literal value="LSUB"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox-list"/>
</item>
<item>
<tag name="search">
<ignore>
<literal value="SEARCH"/>
</ignore>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_nz-number"/>
</many>
</tag>
</item>
<item>
<tag name="status">
<tag name="xx_key_value_map">
<ignore>
<literal value="STATUS"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
<ruleRef uri="SP"/>
<ignore>
<literal value="("/>
</ignore>
<optional>
<ruleRef uri="rfc3501_status-att-list"/>
</optional>
<ignore>
<literal value=")"/>
</ignore>
</tag>
</tag>
</item>
<item>
<tag name="exists">
<ruleRef uri="rfc3501_number"/>
<ruleRef uri="SP"/>
<ignore>
<literal value="EXISTS"/>
</ignore>
</tag>
</item>
<item>
<tag name="recent">
<ruleRef uri="rfc3501_number"/>
<ruleRef uri="SP"/>
<ignore>
<literal value="RECENT"/>
</ignore>
</tag>
</item>
</oneOf>
</rule>
<rule id="rfc3501_mailbox-list">
<tag name="xx_key_value_map">
<ignore>
<literal value="("/>
</ignore>
<optional>
<ruleRef uri="rfc3501_mbx-list-flags"/>
</optional>
<ignore>
<literal value=")"/>
</ignore>
<ruleRef uri="SP"/>
<tag name="info">
<oneOf>
<item>
<ruleRef uri="DQUOTE"/>
<ignore>
<ruleRef uri="rfc3501_QUOTED-CHAR"/>
</ignore>
<ruleRef uri="DQUOTE"/>
</item>
<item>
<ruleRef uri="rfc3501_nil"/>
</item>
</oneOf>
</tag>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</tag>
</rule>
<rule id="rfc3501_mbx-list-flags">
<tag name="flags">
<oneOf>
<item>
<many>
<ruleRef uri="rfc3501_mbx-list-oflag"/>
<ruleRef uri="SP"/>
</many>
<ruleRef uri="rfc3501_mbx-list-sflag"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mbx-list-oflag"/>
</many>
</item>
<item>
<ruleRef uri="rfc3501_mbx-list-oflag"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mbx-list-oflag"/>
</many>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_mbx-list-oflag">
<oneOf>
<item>
<replace value="Noinferiors">
<literal value="\Noinferiors"/>
</replace>
</item>
<item>
<ruleRef uri="rfc3501_flag-extension-tagless"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_mbx-list-sflag">
<oneOf>
<item>
<replace value="Noselect">
<literal value="\Noselect"/>
</replace>
</item>
<item>
<replace value="Marked">
<literal value="\Marked"/>
</replace>
</item>
<item>
<replace value="Unmarked">
<literal value="\Unmarked"/>
</replace>
</item>
</oneOf>
</rule>
<rule id="rfc3501_media-basic" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="DQUOTE"/>
<oneOf>
<item>
<replace value="APPLICATION">
<literal value="APPLICATION"/>
</replace>
</item>
<item>
<replace value="AUDIO">
<literal value="AUDIO"/>
</replace>
</item>
<item>
<replace value="IMAGE">
<literal value="IMAGE"/>
</replace>
</item>
<item>
<replace value="MESSAGE">
<literal value="MESSAGE"/>
</replace>
</item>
<item>
<replace value="VIDEO">
<literal value="VIDEO"/>
</replace>
</item>
</oneOf>
<ruleRef uri="DQUOTE"/>
</item>
<item>
<ruleRef uri="rfc3501_string"/>
</item>
</oneOf>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_media-subtype"/>
</rule>
<rule id="rfc3501_media-message" postprocess="tag">
<ruleRef uri="DQUOTE"/>
<replace value="MESSAGE">
<literal value="MESSAGE"/>
</replace>
<ruleRef uri="DQUOTE"/>
<ruleRef uri="SP"/>
<ruleRef uri="DQUOTE"/>
<replace value="RFC822">
<literal value="RFC822"/>
</replace>
<ruleRef uri="DQUOTE"/>
</rule>
<rule id="rfc3501_media-subtype">
<ruleRef uri="rfc3501_string"/>
</rule>
<rule id="rfc3501_media-text">
<tag name="text">
<ruleRef uri="DQUOTE"/>
<ignore>
<literal value="TEXT"/>
</ignore>
<ruleRef uri="DQUOTE"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_media-subtype"/>
</tag>
</rule>
<rule id="rfc3501_message-data">
<tag name="xx_key_value_map">
<tag name="message-number">
<ruleRef uri="rfc3501_nz-number"/>
</tag>
<ruleRef uri="SP"/>
<oneOf>
<item>
<tag name="action">
<replace value="EXPUNGE">
<literal value="EXPUNGE"/>
</replace>
</tag>
</item>
<item>
<ignore>
<literal value="FETCH"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_msg-att"/>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_msg-att">
<ignore>
<literal value="("/>
</ignore>
<oneOf>
<item>
<ruleRef uri="rfc3501_msg-att-dynamic"/>
</item>
<item>
<ruleRef uri="rfc3501_msg-att-static"/>
</item>
</oneOf>
<many>
<ruleRef uri="SP"/>
<oneOf>
<item>
<ruleRef uri="rfc3501_msg-att-dynamic"/>
</item>
<item>
<ruleRef uri="rfc3501_msg-att-static"/>
</item>
</oneOf>
</many>
<ignore>
<literal value=")"/>
</ignore>
</rule>
<rule id="rfc3501_msg-att-dynamic">
<ignore>
<literal value="FLAGS"/>
</ignore>
<ruleRef uri="SP"/>
<ignore>
<literal value="("/>
</ignore>
<optional>
<ruleRef uri="rfc3501_flag-fetch"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_flag-fetch"/>
</many>
</optional>
<ignore>
<literal value=")"/>
</ignore>
</rule>
<rule id="rfc3501_msg-att-static">
<oneOf>
<item>
<ignore>
<literal value="ENVELOPE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_envelope"/>
</item>
<item>
<tag name="internal_date">
<ignore>
<literal value="INTERNALDATE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_date-time"/>
</tag>
</item>
<item>
<ignore>
<literal value="RFC822"/>
</ignore>
<oneOf>
<item>
<tag name="rfc822">
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_nstring"/>
</tag>
</item>
<item>
<tag name="rfc822_header">
<ignore>
<literal value=".HEADER"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_nstring"/>
</tag>
</item>
<item>
<tag name="rfc822_text">
<ignore>
<literal value=".TEXT"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_nstring"/>
</tag>
</item>
</oneOf>
</item>
<item>
<tag name="rfc822_size">
<ignore>
<literal value="RFC822.SIZE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_number"/>
</tag>
</item>
<item>
<ignore>
<literal value="BODY"/>
</ignore>
<optional>
<ignore>
<literal value="STRUCTURE"/>
</ignore>
</optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_body-top-level"/>
</item>
<item>
<ignore>
<literal value="BODY"/>
</ignore>
<ruleRef uri="rfc3501_section"/>
<optional>
<ignore>
<literal value="<"/>
</ignore>
<ruleRef uri="rfc3501_number"/>
<ignore>
<literal value=">"/>
</ignore>
</optional>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_nstring"/>
</item>
<item>
<ignore>
<literal value="UID"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_uniqueid"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_nil">
<tag name="xx_nil">
<ignore>
<literal value="NIL"/>
</ignore>
</tag>
</rule>
<rule id="rfc3501_nstring">
<oneOf>
<item>
<ruleRef uri="rfc3501_string"/>
</item>
<item>
<ruleRef uri="rfc3501_nil"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_number">
<tag name="xx_number">
<untagAndFlatten>
<manyOne>
<ruleRef uri="DIGIT"/>
</manyOne>
</untagAndFlatten>
</tag>
</rule>
<rule id="rfc3501_nz-number">
<tag name="xx_number">
<untagAndFlatten>
<ruleRef uri="DIGIT-nz"/>
<many>
<ruleRef uri="DIGIT"/>
</many>
</untagAndFlatten>
</tag>
</rule>
<rule id="rfc3501_password" postprocess="tag">
<ruleRef uri="rfc3501_astring"/>
</rule>
<rule id="rfc3501_quoted" postprocess="tag">
<ruleRef uri="DQUOTE"/>
<many>
<ruleRef uri="rfc3501_QUOTED-CHAR"/>
</many>
<ruleRef uri="DQUOTE"/>
</rule>
<rule id="rfc3501_QUOTED-CHAR" postprocess="tag">
<oneOf>
<item>
<!--any TEXT-CHAR except quoted-specials-->
<oneOf>
<item>
<hexRange start="01" end="09"/>
</item>
<item>
<hexRange start="0B" end="0C"/>
</item>
<item>
<hexRange start="0E" end="21"/>
</item>
<item>
<hexRange start="23" end="5B"/>
</item>
<item>
<hexRange start="5D" end="7F"/>
</item>
</oneOf>
</item>
<item>
<!-- TODO not sure about this -->
<ignore>
<literal value="\"/>
</ignore>
<ruleRef uri="rfc3501_quoted-specials"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_quoted-specials" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="DQUOTE"/>
</item>
<item>
<ignore>
<literal value="\"/>
</ignore>
</item>
</oneOf>
</rule>
<rule id="rfc3501_rename" postprocess="tag">
<ignore>
<literal value="RENAME"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</rule>
<rule id="rfc3501_response">
<tag name="xx_key_value_map">
<tag name="payload">
<many>
<oneOf>
<item>
<ruleRef uri="rfc3501_continue-req"/>
</item>
<item>
<ruleRef uri="rfc3501_response-data"/>
</item>
</oneOf>
</many>
</tag>
<ruleRef uri="rfc3501_response-done"/>
</tag>
</rule>
<rule id="rfc3501_response-data">
<ignore>
<literal value="*"/>
</ignore>
<ruleRef uri="SP"/>
<oneOf>
<item>
<ruleRef uri="rfc3501_resp-cond-state"/>
</item>
<item>
<ruleRef uri="rfc3501_resp-cond-bye"/>
</item>
<item>
<ruleRef uri="rfc3501_mailbox-data"/>
</item>
<item>
<ruleRef uri="rfc3501_message-data"/>
</item>
<item>
<ruleRef uri="rfc3501_capability-data"/>
</item>
</oneOf>
<ruleRef uri="CRLF"/>
</rule>
<rule id="rfc3501_response-done" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_response-tagged"/>
</item>
<item>
<ruleRef uri="rfc3501_response-fatal"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_response-fatal" postprocess="tag">
<ignore>
<literal value="*"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_resp-cond-bye"/>
<ruleRef uri="CRLF"/>
</rule>
<rule id="rfc3501_response-tagged" postprocess="tag">
<ruleRef uri="rfc3501_tag"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_resp-cond-state-final"/>
<ruleRef uri="CRLF"/>
</rule>
<rule id="rfc3501_resp-cond-auth" postprocess="tag">
<ruleRef uri="rfc3501_resp-cond-auth-prefix"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_resp-text-tagless"/>
</rule>
<rule id="rfc3501_resp-cond-bye" postprocess="tag">
<!-- TODO might need more work -->
<ignore>
<literal value="BYE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_resp-text"/>
</rule>
<rule id="rfc3501_resp-cond-state" postprocess="ignore">
<ignore>
<ruleRef uri="rfc3501_response_codes"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_resp-text"/>
</rule>
<rule id="rfc3501_resp-specials" postprocess="tag">
<ignore>
<literal value="]"/>
</ignore>
</rule>
<rule id="rfc3501_resp-text" postprocess="tag">
<ruleRef uri="rfc3501_resp-text-tagless"/>
</rule>
<rule id="rfc3501_resp-text-code" postprocess="tag">
<!-- TODO refactor this -->
<oneOf>
<item>
<replace value="ALERT">
<literal value="ALERT"/>
</replace>
</item>
<item>
<ignore>
<literal value="BADCHARSET"/>
</ignore>
<optional>
<ruleRef uri="SP"/>
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_astring"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</many>
<ignore>
<literal value=")"/>
</ignore>
</optional>
</item>
<item>
<ruleRef uri="rfc3501_capability-data"/>
</item>
<item>
<replace value="PARSE">
<literal value="PARSE"/>
</replace>
</item>
<item>
<ignore>
<literal value="PERMANENTFLAGS"/>
</ignore>
<ruleRef uri="SP"/>
<ignore>
<literal value="("/>
</ignore>
<optional>
<ruleRef uri="rfc3501_flag-perm"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_flag-perm"/>
</many>
</optional>
<ignore>
<literal value=")"/>
</ignore>
</item>
<item>
<replace value="READ-ONLY">
<literal value="READ-ONLY"/>
</replace>
</item>
<item>
<replace value="READ-WRITE">
<literal value="READ-WRITE"/>
</replace>
</item>
<item>
<replace value="TRYCREATE">
<literal value="TRYCREATE"/>
</replace>
</item>
<item>
<ignore>
<literal value="UIDNEXT"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_nz-number"/>
</item>
<item>
<literal value="UIDVALIDITY"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_nz-number"/>
</item>
<item>
<ignore>
<literal value="UNSEEN"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_nz-number"/>
</item>
<item>
<ruleRef uri="rfc3501_atom"/>
<optional>
<ruleRef uri="SP"/>
<manyOne>
<!--any TEXT-CHAR except "]"-->
<oneOf>
<item>
<hexRange start="01" end="09"/>
</item>
<item>
<hexRange start="0B" end="0C"/>
</item>
<item>
<hexRange start="0E" end="5C"/>
</item>
<item>
<hexRange start="5E" end="7F"/>
</item>
</oneOf>
</manyOne>
</optional>
</item>
</oneOf>
</rule>
<rule id="rfc3501_search" postprocess="tag">
<ignore>
<literal value="SEARCH"/>
</ignore>
<optional>
<ruleRef uri="SP"/>
<ignore>
<literal value="CHARSET"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</optional>
<manyOne>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_search-key"/>
</manyOne>
</rule>
<rule id="rfc3501_search-key" postprocess="tag">
<oneOf>
<item>
<replace value="ALL">
<literal value="ALL"/>
</replace>
</item>
<item>
<replace value="ANSWERED">
<literal value="ANSWERED"/>
</replace>
</item>
<item>
<ignore>
<literal value="BCC"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</item>
<item>
<ignore>
<literal value="BEFORE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_date"/>
</item>
<item>
<literal value="BODY"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</item>
<item>
<ignore>
<literal value="CC"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</item>
<item>
<replace value="DELETED">
<literal value="DELETED"/>
</replace>
</item>
<item>
<replace value="FLAGGED">
<literal value="FLAGGED"/>
</replace>
</item>
<item>
<ignore>
<literal value="FROM"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</item>
<item>
<literal value="KEYWORD"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_flag-keyword"/>
</item>
<item>
<replace value="NEW">
<literal value="NEW"/>
</replace>
</item>
<item>
<replace value="OLD">
<literal value="OLD"/>
</replace>
</item>
<item>
<ignore>
<literal value="ON"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_date"/>
</item>
<item>
<replace value="RECENT">
<literal value="RECENT"/>
</replace>
</item>
<item>
<replace value="SEEN">
<literal value="SEEN"/>
</replace>
</item>
<item>
<ignore>
<literal value="SINCE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_date"/>
</item>
<item>
<ignore>
<literal value="SUBJECT"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</item>
<item>
<ignore>
<literal value="TEXT"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</item>
<item>
<ignore>
<literal value="TO"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</item>
<item>
<replace value="UNANSWERED">
<literal value="UNANSWERED"/>
</replace>
</item>
<item>
<replace value="UNDELETED">
<literal value="UNDELETED"/>
</replace>
</item>
<item>
<replace value="UNFLAGGED">
<literal value="UNFLAGGED"/>
</replace>
</item>
<item>
<ignore>
<literal value="UNKEYWORD"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_flag-keyword"/>
</item>
<item>
<replace value="UNSEEN">
<literal value="UNSEEN"/>
</replace>
</item>
<item>
<replace value="DRAFT">
<literal value="DRAFT"/>
</replace>
</item>
<item>
<ignore>
<literal value="HEADER"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_header-fld-name"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_astring"/>
</item>
<item>
<ignore>
<literal value="LARGER"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_number"/>
</item>
<item>
<ignore>
<literal value="NOT"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_search-key"/>
</item>
<item>
<ignore>
<literal value="OR"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_search-key"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_search-key"/>
</item>
<item>
<ignore>
<literal value="SENTBEFORE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_date"/>
</item>
<item>
<ignore>
<literal value="SENTON"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_date"/>
</item>
<item>
<ignore>
<literal value="SENTSINCE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_date"/>
</item>
<item>
<ignore>
<literal value="SMALLER"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_number"/>
</item>
<item>
<ignore>
<literal value="UID"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_sequence-set"/>
</item>
<item>
<replace value="UNDRAFT">
<literal value="UNDRAFT"/>
</replace>
</item>
<item>
<ruleRef uri="rfc3501_sequence-set"/>
</item>
<item>
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_search-key"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_search-key"/>
</many>
<ignore>
<literal value=")"/>
</ignore>
</item>
</oneOf>
</rule>
<rule id="rfc3501_section" postprocess="tag">
<ignore>
<literal value="["/>
</ignore>
<optional>
<ruleRef uri="rfc3501_section-spec"/>
</optional>
<ignore>
<literal value="]"/>
</ignore>
</rule>
<rule id="rfc3501_section-msgtext" postprocess="tag">
<oneOf>
<item>
<replace value="HEADER">
<literal value="HEADER"/>
</replace>
</item>
<item>
<ignore>
<literal value="HEADER.FIELDS"/>
</ignore>
<oneOf>
<item>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_header-list"/>
</item>
<item>
<ignore>
<literal value=".NOT"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_header-list"/>
</item>
</oneOf>
</item>
<item>
<replace value="TEXT">
<literal value="TEXT"/>
</replace>
</item>
</oneOf>
</rule>
<rule id="rfc3501_section-part" postprocess="tag">
<untagAndFlatten>
<ruleRef uri="rfc3501_nz-number"/>
</untagAndFlatten>
<many>
<literal value="."/>
<untagAndFlatten>
<ruleRef uri="rfc3501_nz-number"/>
</untagAndFlatten>
</many>
</rule>
<rule id="rfc3501_section-spec" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_section-msgtext"/>
</item>
<item>
<ruleRef uri="rfc3501_section-part"/>
<optional>
<literal value="."/>
<ruleRef uri="rfc3501_section-text"/>
</optional>
</item>
</oneOf>
</rule>
<rule id="rfc3501_section-text" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_section-msgtext"/>
</item>
<item>
<literal value="MIME"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_select" postprocess="tag">
<ignore>
<literal value="SELECT"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</rule>
<rule id="rfc3501_seq-number" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_nz-number"/>
</item>
<item>
<literal value="*"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_seq-range" postprocess="tag">
<ruleRef uri="rfc3501_seq-number"/>
<ignore>
<literal value=":"/>
</ignore>
<ruleRef uri="rfc3501_seq-number"/>
</rule>
<rule id="rfc3501_sequence-set" postprocess="tag">
<oneOf>
<item>
<ruleRef uri="rfc3501_seq-number"/>
</item>
<item>
<ruleRef uri="rfc3501_seq-range"/>
</item>
</oneOf>
<many>
<ignore>
<literal value=","/>
</ignore>
<ruleRef uri="rfc3501_sequence-set"/>
</many>
</rule>
<rule id="rfc3501_status" postprocess="tag">
<ignore>
<literal value="STATUS"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
<ruleRef uri="SP"/>
<ignore>
<literal value="("/>
</ignore>
<ruleRef uri="rfc3501_status-att"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_status-att"/>
</many>
<ignore>
<literal value=")"/>
</ignore>
</rule>
<rule id="rfc3501_status-att">
<tag name="xx_symbol">
<oneOf>
<item>
<replace value="MESSAGES">
<literal value="MESSAGES"/>
</replace>
</item>
<item>
<replace value="RECENT">
<literal value="RECENT"/>
</replace>
</item>
<item>
<replace value="UIDNEXT">
<literal value="UIDNEXT"/>
</replace>
</item>
<item>
<replace value="UIDVALIDITY">
<literal value="UIDVALIDITY"/>
</replace>
</item>
<item>
<replace value="UNSEEN">
<literal value="UNSEEN"/>
</replace>
</item>
</oneOf>
</tag>
</rule>
<rule id="rfc3501_status-att-list">
<tag name="xx_key_value_pair">
<tag name="xx_key_value_map">
<tag name="key">
<ruleRef uri="rfc3501_status-att"/>
</tag>
<ruleRef uri="SP"/>
<tag name="value">
<ruleRef uri="rfc3501_number"/>
</tag>
</tag>
</tag>
<many>
<ruleRef uri="SP"/>
<tag name="xx_key_value_pair">
<tag name="xx_key_value_map">
<tag name="key">
<ruleRef uri="rfc3501_status-att"/>
</tag>
<ruleRef uri="SP"/>
<tag name="value">
<ruleRef uri="rfc3501_number"/>
</tag>
</tag>
</tag>
</many>
</rule>
<rule id="rfc3501_store" postprocess="tag">
<ignore>
<literal value="STORE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_sequence-set"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_store-att-flags"/>
</rule>
<rule id="rfc3501_store-att-flags" postprocess="tag">
<!-- TODO -->
<optional>
<oneOf>
<item>
<literal value="+"/>
</item>
<item>
<literal value="-"/>
</item>
</oneOf>
</optional>
<literal value="FLAGS"/>
<optional>
<literal value=".SILENT"/>
</optional>
<ruleRef uri="SP"/>
<oneOf>
<item>
<ruleRef uri="rfc3501_flag-list"/>
</item>
<item>
<ruleRef uri="rfc3501_flag"/>
<many>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_flag"/>
</many>
</item>
</oneOf>
</rule>
<rule id="rfc3501_string">
<untagAndFlatten>
<oneOf>
<item>
<ruleRef uri="rfc3501_quoted"/>
</item>
<item>
<ruleRef uri="rfc3501_literal"/>
</item>
</oneOf>
</untagAndFlatten>
</rule>
<rule id="rfc3501_subscribe" postprocess="tag">
<ignore>
<literal value="SUBSCRIBE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</rule>
<rule id="rfc3501_tag" postprocess="tag">
<untagAndFlatten>
<manyOne>
<!--any ASTRING-CHAR except "+"-->
<oneOf>
<item>
<hexValue value="21"/>
</item>
<item>
<hexRange start="23" end="24"/>
</item>
<item>
<hexRange start="26" end="27"/>
</item>
<item>
<hexRange start="2C" end="5B"/>
</item>
<item>
<hexRange start="5D" end="7A"/>
</item>
<item>
<hexRange start="7C" end="7E"/>
</item>
</oneOf>
</manyOne>
</untagAndFlatten>
</rule>
<rule id="rfc3501_text">
<untagAndFlatten>
<manyOne>
<ruleRef uri="rfc3501_TEXT-CHAR"/>
</manyOne>
</untagAndFlatten>
</rule>
<rule id="rfc3501_TEXT-CHAR">
<!--any CHAR except CR and LF-->
<oneOf>
<item>
<hexRange start="01" end="09"/>
</item>
<item>
<hexRange start="0B" end="0C"/>
</item>
<item>
<hexRange start="0E" end="7F"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_time">
<tag name="xx_key_value_map">
<tag name="hour">
<tag name="xx_number">
<untagAndFlatten>
<exactly count="2">
<ruleRef uri="DIGIT"/>
</exactly>
</untagAndFlatten>
</tag>
</tag>
<ignore>
<literal value=":"/>
</ignore>
<tag name="minute">
<tag name="xx_number">
<untagAndFlatten>
<exactly count="2">
<ruleRef uri="DIGIT"/>
</exactly>
</untagAndFlatten>
</tag>
</tag>
<ignore>
<literal value=":"/>
</ignore>
<tag name="second">
<tag name="xx_number">
<untagAndFlatten>
<exactly count="2">
<ruleRef uri="DIGIT"/>
</exactly>
</untagAndFlatten>
</tag>
</tag>
</tag>
</rule>
<rule id="rfc3501_uid" postprocess="tag">
<ignore>
<literal value="UID"/>
</ignore>
<ruleRef uri="SP"/>
<oneOf>
<item>
<ruleRef uri="rfc3501_copy"/>
</item>
<item>
<ruleRef uri="rfc3501_fetch"/>
</item>
<item>
<ruleRef uri="rfc3501_search"/>
</item>
<item>
<ruleRef uri="rfc3501_store"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_uniqueid" postprocess="tag">
<ruleRef uri="rfc3501_nz-number"/>
</rule>
<rule id="rfc3501_unsubscribe" postprocess="tag">
<ignore>
<literal value="UNSUBSCRIBE"/>
</ignore>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_mailbox"/>
</rule>
<rule id="rfc3501_userid" postprocess="tag">
<ruleRef uri="rfc3501_astring"/>
</rule>
<rule id="rfc3501_x-command" postprocess="tag">
<ignore>
<literal value="X"/>
</ignore>
<ruleRef uri="rfc3501_atom"/>
<!--experimental command arguments-->
</rule>
<rule id="rfc3501_zone">
<oneOf>
<item>
<ignore>
<literal value="+"/>
</ignore>
<tag name="xx_negate">
<ruleRef uri="rfc3501_zone-unsigned"/>
</tag>
</item>
<item>
<ignore>
<literal value="-"/>
</ignore>
<ruleRef uri="rfc3501_zone-unsigned"/>
</item>
</oneOf>
</rule>
<!-- Refactorings -->
<rule id="rfc3501_response-only">
<tag name="xx_key_value_map">
<tag name="payload">
<many>
<ruleRef uri="rfc3501_response-data"/>
</many>
</tag>
<ruleRef uri="rfc3501_response-done"/>
</tag>
</rule>
<rule id="rfc3501_env-addresses">
<oneOf>
<item>
<ignore>
<literal value="("/>
</ignore>
<manyOne>
<ruleRef uri="rfc3501_address"/>
</manyOne>
<ignore>
<literal value=")"/>
</ignore>
</item>
<item>
<ruleRef uri="rfc3501_nil"/>
</item>
</oneOf>
</rule>
<rule id="rfc3501_zone-unsigned">
<tag name="xx_add">
<tag name="xx_hours_to_minutes">
<tag name="xx_number">
<untagAndFlatten>
<exactly count="2">
<ruleRef uri="DIGIT"/>
</exactly>
</untagAndFlatten>
</tag>
</tag>
<tag name="xx_number">
<untagAndFlatten>
<exactly count="2">
<ruleRef uri="DIGIT"/>
</exactly>
</untagAndFlatten>
</tag>
</tag>
</rule>
<rule id="rfc3501_key_value_pair">
<tag name="xx_key_value_map">
<tag name="key">
<ruleRef uri="rfc3501_string"/>
</tag>
<ruleRef uri="SP"/>
<tag name="value">
<ruleRef uri="rfc3501_string"/>
</tag>
</tag>
</rule>
<rule id="rfc3501_resp-cond-auth-prefix">
<oneOf>
<item>
<ignore>
<literal value="OK"/>
</ignore>
</item>
<item>
<ignore>
<literal value="PREAUTH"/>
</ignore>
</item>
</oneOf>
</rule>
<rule id="rfc3501_resp-text-tagless">
<optional>
<ignore>
<literal value="["/>
</ignore>
<ruleRef uri="rfc3501_resp-text-code"/>
<ignore>
<literal value="]"/>
</ignore>
<ruleRef uri="SP"/>
</optional>
<ruleRef uri="rfc3501_text"/>
</rule>
<rule id="rfc3501_resp-cond-state-final">
<ruleRef uri="rfc3501_response_codes"/>
<ruleRef uri="SP"/>
<ruleRef uri="rfc3501_resp-text"/>
</rule>
<rule id="rfc3501_response_codes">
<oneOf>
<item>
<tag name="xx_response_ok">
<ignore>
<literal value="OK"/>
</ignore>
</tag>
</item>
<item>
<tag name="xx_response_no">
<ignore>
<literal value="NO"/>
</ignore>
</tag>
</item>
<item>
<tag name="xx_response_bad">
<ignore>
<literal value="BAD"/>
</ignore>
</tag>
</item>
</oneOf>
</rule>
<rule id="rfc3501_flag-extension-tagless">
<ignore>
<literal value="\"/>
</ignore>
<ruleRef uri="rfc3501_atom"/>
</rule>
<rule id="rfc3501_body-top-level">
<tag name="body">
<ruleRef uri="rfc3501_body"/>
</tag>
</rule>
<!-- RFC 3501 -->
<!-- Auxiliary -->
<rule id="aux_weekday">
<oneOf>
<item>
<literal value="Mon"/>
</item>
<item>
<literal value="Tue"/>
</item>
<item>
<literal value="Wed"/>
</item>
<item>
<literal value="Thu"/>
</item>
<item>
<literal value="Fri"/>
</item>
<item>
<literal value="Sat"/>
</item>
<item>
<literal value="Sun"/>
</item>
</oneOf>
</rule>
<rule id="aux_month-name">
<tag name="xx_number">
<untagAndFlatten>
<oneOf>
<item>
<replace value="01">
<literal value="Jan"/>
</replace>
</item>
<item>
<replace value="02">
<literal value="Feb"/>
</replace>
</item>
<item>
<replace value="03">
<literal value="Mar"/>
</replace>
</item>
<item>
<replace value="04">
<literal value="Apr"/>
</replace>
</item>
<item>
<replace value="05">
<literal value="May"/>
</replace>
</item>
<item>
<replace value="06">
<literal value="Jun"/>
</replace>
</item>
<item>
<replace value="07">
<literal value="Jul"/>
</replace>
</item>
<item>
<replace value="08">
<literal value="Aug"/>
</replace>
</item>
<item>
<replace value="09">
<literal value="Sep"/>
</replace>
</item>
<item>
<replace value="10">
<literal value="Oct"/>
</replace>
</item>
<item>
<replace value="11">
<literal value="Nov"/>
</replace>
</item>
<item>
<replace value="12">
<literal value="Dec"/>
</replace>
</item>
</oneOf>
</untagAndFlatten>
</tag>
</rule>
<rule id="aux_env-date">
<tag name="xx_date_time_value">
<tag name="xx_key_value_map">
<ignore>
<optional>
<ruleRef uri="aux_weekday"/>
<literal value=","/>
<ruleRef uri="SP"/>
</optional>
</ignore>
<tag name="date">
<tag name="xx_date">
<tag name="xx_key_value_map">
<tag name="day">
<ruleRef uri="rfc3501_date-day-fixed"/>
</tag>
<ruleRef uri="SP"/>
<tag name="month">
<ruleRef uri="aux_month-name"/>
</tag>
<ruleRef uri="SP"/>
<tag name="year">
<ruleRef uri="rfc3501_date-year"/>
</tag>
</tag>
</tag>
</tag>
<ruleRef uri="SP"/>
<tag name="time">
<tag name="xx_time_of_day">
<ruleRef uri="rfc3501_time"/>
</tag>
</tag>
<ruleRef uri="SP"/>
<tag name="offset">
<ruleRef uri="rfc3501_zone"/>
</tag>
<ignore>
<optional>
<ruleRef uri="SP"/>
<literal value="("/>
<exactly count="3">
<ruleRef uri="ALPHA"/>
</exactly>
<literal value=")"/>
<many>
<ruleRef uri="SP"/>
</many>
</optional>
</ignore>
</tag>
</tag>
</rule>
<!-- Auxiliary -->
<!-- CORE RFC -->
<rule id="ALPHA">
<oneOf>
<item>
<hexRange start="41" end="5A"/>
</item>
<item>
<hexRange start="61" end="7A"/>
</item>
</oneOf>
</rule>
<rule id="BIT">
<oneOf>
<item>
<literal value="0"/>
</item>
<item>
<literal value="1"/>
</item>
</oneOf>
</rule>
<rule id="CHAR">
<hexRange start="01" end="7F"/>
</rule>
<rule id="CR" postprocess="ignore">
<hexValue value="0D"/>
</rule>
<rule id="CRLF" postprocess="ignore">
<ruleRef uri="CR"/>
<ruleRef uri="LF"/>
</rule>
<rule id="CTL">
<oneOf>
<item>
<hexRange start="00" end="1F"/>
</item>
<item>
<hexValue value="7F"/>
</item>
</oneOf>
</rule>
<rule id="DIGIT">
<hexRange start="30" end="39"/>
</rule>
<rule id="DQUOTE" postprocess="ignore">
<hexValue value="22"/>
</rule>
<rule id="HEXDIG">
<oneOf>
<item>
<ruleRef uri="DIGIT"/>
</item>
<item>
<literal value="A"/>
</item>
<item>
<literal value="B"/>
</item>
<item>
<literal value="C"/>
</item>
<item>
<literal value="D"/>
</item>
<item>
<literal value="E"/>
</item>
<item>
<literal value="F"/>
</item>
</oneOf>
</rule>
<rule id="HTAB" postprocess="ignore">
<hexValue value="09"/>
</rule>
<rule id="LF" postprocess="ignore">
<hexValue value="0A"/>
</rule>
<rule id="LWSP" postprocess="ignore">
<many>
<oneOf>
<item>
<ruleRef uri="WSP"/>
</item>
<item>
<ruleRef uri="CRLF"/>
<ruleRef uri="WSP"/>
</item>
</oneOf>
</many>
</rule>
<rule id="OCTET">
<hexRange start="00" end="FF"/>
</rule>
<rule id="SP" postprocess="ignore">
<hexValue value="20"/>
</rule>
<rule id="VCHAR">
<hexRange start="21" end="7E"/>
</rule>
<rule id="WSP" postprocess="ignore">
<oneOf>
<item>
<ruleRef uri="SP"/>
</item>
<item>
<ruleRef uri="HTAB"/>
</item>
</oneOf>
</rule>
</grammar>