1. <lexer>
    
  2.   <config>
    
  3.     <name>Sieve</name>
    
  4.     <alias>sieve</alias>
    
  5.     <filename>*.siv</filename>
    
  6.     <filename>*.sieve</filename>
    
  7.   </config>
    
  8.   <rules>
    
  9.     <state name="root">
    
  10.       <rule pattern="\s+">
    
  11.         <token type="Text"/>
    
  12.       </rule>
    
  13.       <rule pattern="[();,{}\[\]]">
    
  14.         <token type="Punctuation"/>
    
  15.       </rule>
    
  16.       <rule pattern="(?i)require">
    
  17.         <token type="KeywordNamespace"/>
    
  18.       </rule>
    
  19.       <rule pattern="(?i)(:)(addresses|all|contains|content|create|copy|comparator|count|days|detail|domain|fcc|flags|from|handle|importance|is|localpart|length|lowerfirst|lower|matches|message|mime|options|over|percent|quotewildcard|raw|regex|specialuse|subject|text|under|upperfirst|upper|value)">
    
  20.         <bygroups>
    
  21.           <token type="NameTag"/>
    
  22.           <token type="NameTag"/>
    
  23.         </bygroups>
    
  24.       </rule>
    
  25.       <rule pattern="(?i)(address|addflag|allof|anyof|body|discard|elsif|else|envelope|ereject|exists|false|fileinto|if|hasflag|header|keep|notify_method_capability|notify|not|redirect|reject|removeflag|setflag|size|spamtest|stop|string|true|vacation|virustest)">
    
  26.         <token type="NameBuiltin"/>
    
  27.       </rule>
    
  28.       <rule pattern="(?i)set">
    
  29.         <token type="KeywordDeclaration"/>
    
  30.       </rule>
    
  31.       <rule pattern="([0-9.]+)([kmgKMG])?">
    
  32.         <bygroups>
    
  33.           <token type="LiteralNumber"/>
    
  34.           <token type="LiteralNumber"/>
    
  35.         </bygroups>
    
  36.       </rule>
    
  37.       <rule pattern="#.*$">
    
  38.         <token type="CommentSingle"/>
    
  39.       </rule>
    
  40.       <rule pattern="/\*.*\*/">
    
  41.         <token type="CommentMultiline"/>
    
  42.       </rule>
    
  43.       <rule pattern="&#34;[^&#34;]*?&#34;">
    
  44.         <token type="LiteralString"/>
    
  45.       </rule>
    
  46.       <rule pattern="text:">
    
  47.         <token type="NameTag"/>
    
  48.         <push state="text"/>
    
  49.       </rule>
    
  50.     </state>
    
  51.     <state name="text">
    
  52.       <rule pattern="[^.].*?\n">
    
  53.         <token type="LiteralString"/>
    
  54.       </rule>
    
  55.       <rule pattern="^\.">
    
  56.         <token type="Punctuation"/>
    
  57.         <pop depth="1"/>
    
  58.       </rule>
    
  59.     </state>
    
  60.   </rules>
    
  61. </lexer>