1. <lexer>
    
  2.   <config>
    
  3.     <name>Standard ML</name>
    
  4.     <alias>sml</alias>
    
  5.     <filename>*.sml</filename>
    
  6.     <filename>*.sig</filename>
    
  7.     <filename>*.fun</filename>
    
  8.     <mime_type>text/x-standardml</mime_type>
    
  9.     <mime_type>application/x-standardml</mime_type>
    
  10.   </config>
    
  11.   <rules>
    
  12.     <state name="delimiters">
    
  13.       <rule pattern="\(|\[|\{">
    
  14.         <token type="Punctuation"/>
    
  15.         <push state="main"/>
    
  16.       </rule>
    
  17.       <rule pattern="\)|\]|\}">
    
  18.         <token type="Punctuation"/>
    
  19.         <pop depth="1"/>
    
  20.       </rule>
    
  21.       <rule pattern="\b(let|if|local)\b(?!\&#39;)">
    
  22.         <token type="KeywordReserved"/>
    
  23.         <push state="main" state="main"/>
    
  24.       </rule>
    
  25.       <rule pattern="\b(struct|sig|while)\b(?!\&#39;)">
    
  26.         <token type="KeywordReserved"/>
    
  27.         <push state="main"/>
    
  28.       </rule>
    
  29.       <rule pattern="\b(do|else|end|in|then)\b(?!\&#39;)">
    
  30.         <token type="KeywordReserved"/>
    
  31.         <pop depth="1"/>
    
  32.       </rule>
    
  33.     </state>
    
  34.     <state name="root">
    
  35.       <rule>
    
  36.         <push state="main"/>
    
  37.       </rule>
    
  38.     </state>
    
  39.     <state name="breakout">
    
  40.       <rule pattern="(?=\b(where|do|handle|if|sig|op|while|case|as|else|signature|andalso|struct|infixr|functor|in|structure|then|local|rec|end|fun|of|orelse|val|include|fn|with|exception|let|and|infix|sharing|datatype|type|abstype|withtype|eqtype|nonfix|raise|open)\b(?!\&#39;))">
    
  41.         <token type="Text"/>
    
  42.         <pop depth="1"/>
    
  43.       </rule>
    
  44.     </state>
    
  45.     <state name="tyvarseq">
    
  46.       <rule pattern="\s">
    
  47.         <token type="Text"/>
    
  48.       </rule>
    
  49.       <rule pattern="\(\*">
    
  50.         <token type="CommentMultiline"/>
    
  51.         <push state="comment"/>
    
  52.       </rule>
    
  53.       <rule pattern="\&#39;[\w\&#39;]*">
    
  54.         <token type="NameDecorator"/>
    
  55.       </rule>
    
  56.       <rule pattern="[a-zA-Z][\w&#39;]*">
    
  57.         <token type="Name"/>
    
  58.       </rule>
    
  59.       <rule pattern=",">
    
  60.         <token type="Punctuation"/>
    
  61.       </rule>
    
  62.       <rule pattern="\)">
    
  63.         <token type="Punctuation"/>
    
  64.         <pop depth="1"/>
    
  65.       </rule>
    
  66.       <rule pattern="[!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+">
    
  67.         <token type="Name"/>
    
  68.       </rule>
    
  69.     </state>
    
  70.     <state name="char">
    
  71.       <rule pattern="[^&#34;\\]">
    
  72.         <token type="LiteralStringChar"/>
    
  73.       </rule>
    
  74.       <rule pattern="\\[\\&#34;abtnvfr]">
    
  75.         <token type="LiteralStringEscape"/>
    
  76.       </rule>
    
  77.       <rule pattern="\\\^[\x40-\x5e]">
    
  78.         <token type="LiteralStringEscape"/>
    
  79.       </rule>
    
  80.       <rule pattern="\\[0-9]{3}">
    
  81.         <token type="LiteralStringEscape"/>
    
  82.       </rule>
    
  83.       <rule pattern="\\u[0-9a-fA-F]{4}">
    
  84.         <token type="LiteralStringEscape"/>
    
  85.       </rule>
    
  86.       <rule pattern="\\\s+\\">
    
  87.         <token type="LiteralStringInterpol"/>
    
  88.       </rule>
    
  89.       <rule pattern="&#34;">
    
  90.         <token type="LiteralStringChar"/>
    
  91.         <pop depth="1"/>
    
  92.       </rule>
    
  93.     </state>
    
  94.     <state name="datbind">
    
  95.       <rule>
    
  96.         <include state="whitespace"/>
    
  97.       </rule>
    
  98.       <rule pattern="\b(and)\b(?!\&#39;)">
    
  99.         <token type="KeywordReserved"/>
    
  100.         <push state="#pop" state="dname"/>
    
  101.       </rule>
    
  102.       <rule pattern="\b(withtype)\b(?!\&#39;)">
    
  103.         <token type="KeywordReserved"/>
    
  104.         <push state="#pop" state="tname"/>
    
  105.       </rule>
    
  106.       <rule pattern="\b(of)\b(?!\&#39;)">
    
  107.         <token type="KeywordReserved"/>
    
  108.       </rule>
    
  109.       <rule pattern="(\|)(\s*)([a-zA-Z][\w&#39;]*)">
    
  110.         <bygroups>
    
  111.           <token type="Punctuation"/>
    
  112.           <token type="Text"/>
    
  113.           <token type="NameClass"/>
    
  114.         </bygroups>
    
  115.       </rule>
    
  116.       <rule pattern="(\|)(\s+)([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  117.         <bygroups>
    
  118.           <token type="Punctuation"/>
    
  119.           <token type="Text"/>
    
  120.           <token type="NameClass"/>
    
  121.         </bygroups>
    
  122.       </rule>
    
  123.       <rule>
    
  124.         <include state="breakout"/>
    
  125.       </rule>
    
  126.       <rule>
    
  127.         <include state="core"/>
    
  128.       </rule>
    
  129.       <rule pattern="\S+">
    
  130.         <token type="Error"/>
    
  131.       </rule>
    
  132.     </state>
    
  133.     <state name="string">
    
  134.       <rule pattern="[^&#34;\\]">
    
  135.         <token type="LiteralStringDouble"/>
    
  136.       </rule>
    
  137.       <rule pattern="\\[\\&#34;abtnvfr]">
    
  138.         <token type="LiteralStringEscape"/>
    
  139.       </rule>
    
  140.       <rule pattern="\\\^[\x40-\x5e]">
    
  141.         <token type="LiteralStringEscape"/>
    
  142.       </rule>
    
  143.       <rule pattern="\\[0-9]{3}">
    
  144.         <token type="LiteralStringEscape"/>
    
  145.       </rule>
    
  146.       <rule pattern="\\u[0-9a-fA-F]{4}">
    
  147.         <token type="LiteralStringEscape"/>
    
  148.       </rule>
    
  149.       <rule pattern="\\\s+\\">
    
  150.         <token type="LiteralStringInterpol"/>
    
  151.       </rule>
    
  152.       <rule pattern="&#34;">
    
  153.         <token type="LiteralStringDouble"/>
    
  154.         <pop depth="1"/>
    
  155.       </rule>
    
  156.     </state>
    
  157.     <state name="tname">
    
  158.       <rule>
    
  159.         <include state="whitespace"/>
    
  160.       </rule>
    
  161.       <rule>
    
  162.         <include state="breakout"/>
    
  163.       </rule>
    
  164.       <rule pattern="\&#39;[\w\&#39;]*">
    
  165.         <token type="NameDecorator"/>
    
  166.       </rule>
    
  167.       <rule pattern="\(">
    
  168.         <token type="Punctuation"/>
    
  169.         <push state="tyvarseq"/>
    
  170.       </rule>
    
  171.       <rule pattern="=(?![!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  172.         <token type="Punctuation"/>
    
  173.         <push state="#pop" state="typbind"/>
    
  174.       </rule>
    
  175.       <rule pattern="([a-zA-Z][\w&#39;]*)">
    
  176.         <token type="KeywordType"/>
    
  177.       </rule>
    
  178.       <rule pattern="([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  179.         <token type="KeywordType"/>
    
  180.       </rule>
    
  181.       <rule pattern="\S+">
    
  182.         <token type="Error"/>
    
  183.         <pop depth="1"/>
    
  184.       </rule>
    
  185.     </state>
    
  186.     <state name="dname">
    
  187.       <rule>
    
  188.         <include state="whitespace"/>
    
  189.       </rule>
    
  190.       <rule>
    
  191.         <include state="breakout"/>
    
  192.       </rule>
    
  193.       <rule pattern="\&#39;[\w\&#39;]*">
    
  194.         <token type="NameDecorator"/>
    
  195.       </rule>
    
  196.       <rule pattern="\(">
    
  197.         <token type="Punctuation"/>
    
  198.         <push state="tyvarseq"/>
    
  199.       </rule>
    
  200.       <rule pattern="(=)(\s*)(datatype)">
    
  201.         <bygroups>
    
  202.           <token type="Punctuation"/>
    
  203.           <token type="Text"/>
    
  204.           <token type="KeywordReserved"/>
    
  205.         </bygroups>
    
  206.         <pop depth="1"/>
    
  207.       </rule>
    
  208.       <rule pattern="=(?![!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  209.         <token type="Punctuation"/>
    
  210.         <push state="#pop" state="datbind" state="datcon"/>
    
  211.       </rule>
    
  212.       <rule pattern="([a-zA-Z][\w&#39;]*)">
    
  213.         <token type="KeywordType"/>
    
  214.       </rule>
    
  215.       <rule pattern="([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  216.         <token type="KeywordType"/>
    
  217.       </rule>
    
  218.       <rule pattern="\S+">
    
  219.         <token type="Error"/>
    
  220.         <pop depth="1"/>
    
  221.       </rule>
    
  222.     </state>
    
  223.     <state name="typbind">
    
  224.       <rule>
    
  225.         <include state="whitespace"/>
    
  226.       </rule>
    
  227.       <rule pattern="\b(and)\b(?!\&#39;)">
    
  228.         <token type="KeywordReserved"/>
    
  229.         <push state="#pop" state="tname"/>
    
  230.       </rule>
    
  231.       <rule>
    
  232.         <include state="breakout"/>
    
  233.       </rule>
    
  234.       <rule>
    
  235.         <include state="core"/>
    
  236.       </rule>
    
  237.       <rule pattern="\S+">
    
  238.         <token type="Error"/>
    
  239.         <pop depth="1"/>
    
  240.       </rule>
    
  241.     </state>
    
  242.     <state name="ename">
    
  243.       <rule>
    
  244.         <include state="whitespace"/>
    
  245.       </rule>
    
  246.       <rule pattern="(exception|and)\b(\s+)([a-zA-Z][\w&#39;]*)">
    
  247.         <bygroups>
    
  248.           <token type="KeywordReserved"/>
    
  249.           <token type="Text"/>
    
  250.           <token type="NameClass"/>
    
  251.         </bygroups>
    
  252.       </rule>
    
  253.       <rule pattern="(exception|and)\b(\s*)([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  254.         <bygroups>
    
  255.           <token type="KeywordReserved"/>
    
  256.           <token type="Text"/>
    
  257.           <token type="NameClass"/>
    
  258.         </bygroups>
    
  259.       </rule>
    
  260.       <rule pattern="\b(of)\b(?!\&#39;)">
    
  261.         <token type="KeywordReserved"/>
    
  262.       </rule>
    
  263.       <rule>
    
  264.         <include state="breakout"/>
    
  265.       </rule>
    
  266.       <rule>
    
  267.         <include state="core"/>
    
  268.       </rule>
    
  269.       <rule pattern="\S+">
    
  270.         <token type="Error"/>
    
  271.       </rule>
    
  272.     </state>
    
  273.     <state name="vname">
    
  274.       <rule>
    
  275.         <include state="whitespace"/>
    
  276.       </rule>
    
  277.       <rule pattern="\&#39;[\w\&#39;]*">
    
  278.         <token type="NameDecorator"/>
    
  279.       </rule>
    
  280.       <rule pattern="\(">
    
  281.         <token type="Punctuation"/>
    
  282.         <push state="tyvarseq"/>
    
  283.       </rule>
    
  284.       <rule pattern="([a-zA-Z][\w&#39;]*)(\s*)(=(?![!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+))">
    
  285.         <bygroups>
    
  286.           <token type="NameVariable"/>
    
  287.           <token type="Text"/>
    
  288.           <token type="Punctuation"/>
    
  289.         </bygroups>
    
  290.         <pop depth="1"/>
    
  291.       </rule>
    
  292.       <rule pattern="([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)(\s*)(=(?![!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+))">
    
  293.         <bygroups>
    
  294.           <token type="NameVariable"/>
    
  295.           <token type="Text"/>
    
  296.           <token type="Punctuation"/>
    
  297.         </bygroups>
    
  298.         <pop depth="1"/>
    
  299.       </rule>
    
  300.       <rule pattern="([a-zA-Z][\w&#39;]*)">
    
  301.         <token type="NameVariable"/>
    
  302.         <pop depth="1"/>
    
  303.       </rule>
    
  304.       <rule pattern="([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  305.         <token type="NameVariable"/>
    
  306.         <pop depth="1"/>
    
  307.       </rule>
    
  308.       <rule>
    
  309.         <pop depth="1"/>
    
  310.       </rule>
    
  311.     </state>
    
  312.     <state name="sname">
    
  313.       <rule>
    
  314.         <include state="whitespace"/>
    
  315.       </rule>
    
  316.       <rule>
    
  317.         <include state="breakout"/>
    
  318.       </rule>
    
  319.       <rule pattern="([a-zA-Z][\w&#39;]*)">
    
  320.         <token type="NameNamespace"/>
    
  321.       </rule>
    
  322.       <rule>
    
  323.         <pop depth="1"/>
    
  324.       </rule>
    
  325.     </state>
    
  326.     <state name="main-fun">
    
  327.       <rule>
    
  328.         <include state="whitespace"/>
    
  329.       </rule>
    
  330.       <rule pattern="\s">
    
  331.         <token type="Text"/>
    
  332.       </rule>
    
  333.       <rule pattern="\(\*">
    
  334.         <token type="CommentMultiline"/>
    
  335.         <push state="comment"/>
    
  336.       </rule>
    
  337.       <rule pattern="\b(fun|and)\b(?!\&#39;)">
    
  338.         <token type="KeywordReserved"/>
    
  339.         <push state="fname"/>
    
  340.       </rule>
    
  341.       <rule pattern="\b(val)\b(?!\&#39;)">
    
  342.         <token type="KeywordReserved"/>
    
  343.         <push state="#pop" state="main" state="vname"/>
    
  344.       </rule>
    
  345.       <rule pattern="\|">
    
  346.         <token type="Punctuation"/>
    
  347.         <push state="fname"/>
    
  348.       </rule>
    
  349.       <rule pattern="\b(case|handle)\b(?!\&#39;)">
    
  350.         <token type="KeywordReserved"/>
    
  351.         <push state="#pop" state="main"/>
    
  352.       </rule>
    
  353.       <rule>
    
  354.         <include state="delimiters"/>
    
  355.       </rule>
    
  356.       <rule>
    
  357.         <include state="core"/>
    
  358.       </rule>
    
  359.       <rule pattern="\S+">
    
  360.         <token type="Error"/>
    
  361.       </rule>
    
  362.     </state>
    
  363.     <state name="datcon">
    
  364.       <rule>
    
  365.         <include state="whitespace"/>
    
  366.       </rule>
    
  367.       <rule pattern="([a-zA-Z][\w&#39;]*)">
    
  368.         <token type="NameClass"/>
    
  369.         <pop depth="1"/>
    
  370.       </rule>
    
  371.       <rule pattern="([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  372.         <token type="NameClass"/>
    
  373.         <pop depth="1"/>
    
  374.       </rule>
    
  375.       <rule pattern="\S+">
    
  376.         <token type="Error"/>
    
  377.         <pop depth="1"/>
    
  378.       </rule>
    
  379.     </state>
    
  380.     <state name="dotted">
    
  381.       <rule pattern="([a-zA-Z][\w&#39;]*)(\.)">
    
  382.         <token type="NameNamespace"/>
    
  383.       </rule>
    
  384.       <rule pattern="([a-zA-Z][\w&#39;]*)">
    
  385.         <token type="Name"/>
    
  386.         <pop depth="1"/>
    
  387.       </rule>
    
  388.       <rule pattern="([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  389.         <token type="Name"/>
    
  390.         <pop depth="1"/>
    
  391.       </rule>
    
  392.       <rule pattern="\s+">
    
  393.         <token type="Error"/>
    
  394.       </rule>
    
  395.       <rule pattern="\S+">
    
  396.         <token type="Error"/>
    
  397.       </rule>
    
  398.     </state>
    
  399.     <state name="main">
    
  400.       <rule>
    
  401.         <include state="whitespace"/>
    
  402.       </rule>
    
  403.       <rule pattern="\b(val|and)\b(?!\&#39;)">
    
  404.         <token type="KeywordReserved"/>
    
  405.         <push state="vname"/>
    
  406.       </rule>
    
  407.       <rule pattern="\b(fun)\b(?!\&#39;)">
    
  408.         <token type="KeywordReserved"/>
    
  409.         <push state="#pop" state="main-fun" state="fname"/>
    
  410.       </rule>
    
  411.       <rule>
    
  412.         <include state="delimiters"/>
    
  413.       </rule>
    
  414.       <rule>
    
  415.         <include state="core"/>
    
  416.       </rule>
    
  417.       <rule pattern="\S+">
    
  418.         <token type="Error"/>
    
  419.       </rule>
    
  420.     </state>
    
  421.     <state name="comment">
    
  422.       <rule pattern="[^(*)]">
    
  423.         <token type="CommentMultiline"/>
    
  424.       </rule>
    
  425.       <rule pattern="\(\*">
    
  426.         <token type="CommentMultiline"/>
    
  427.         <push/>
    
  428.       </rule>
    
  429.       <rule pattern="\*\)">
    
  430.         <token type="CommentMultiline"/>
    
  431.         <pop depth="1"/>
    
  432.       </rule>
    
  433.       <rule pattern="[(*)]">
    
  434.         <token type="CommentMultiline"/>
    
  435.       </rule>
    
  436.     </state>
    
  437.     <state name="whitespace">
    
  438.       <rule pattern="\s+">
    
  439.         <token type="Text"/>
    
  440.       </rule>
    
  441.       <rule pattern="\(\*">
    
  442.         <token type="CommentMultiline"/>
    
  443.         <push state="comment"/>
    
  444.       </rule>
    
  445.     </state>
    
  446.     <state name="core">
    
  447.       <rule pattern="(_|\}|\{|\)|;|,|\[|\(|\]|\.\.\.)">
    
  448.         <token type="Punctuation"/>
    
  449.       </rule>
    
  450.       <rule pattern="#&#34;">
    
  451.         <token type="LiteralStringChar"/>
    
  452.         <push state="char"/>
    
  453.       </rule>
    
  454.       <rule pattern="&#34;">
    
  455.         <token type="LiteralStringDouble"/>
    
  456.         <push state="string"/>
    
  457.       </rule>
    
  458.       <rule pattern="~?0x[0-9a-fA-F]+">
    
  459.         <token type="LiteralNumberHex"/>
    
  460.       </rule>
    
  461.       <rule pattern="0wx[0-9a-fA-F]+">
    
  462.         <token type="LiteralNumberHex"/>
    
  463.       </rule>
    
  464.       <rule pattern="0w\d+">
    
  465.         <token type="LiteralNumberInteger"/>
    
  466.       </rule>
    
  467.       <rule pattern="~?\d+\.\d+[eE]~?\d+">
    
  468.         <token type="LiteralNumberFloat"/>
    
  469.       </rule>
    
  470.       <rule pattern="~?\d+\.\d+">
    
  471.         <token type="LiteralNumberFloat"/>
    
  472.       </rule>
    
  473.       <rule pattern="~?\d+[eE]~?\d+">
    
  474.         <token type="LiteralNumberFloat"/>
    
  475.       </rule>
    
  476.       <rule pattern="~?\d+">
    
  477.         <token type="LiteralNumberInteger"/>
    
  478.       </rule>
    
  479.       <rule pattern="#\s*[1-9][0-9]*">
    
  480.         <token type="NameLabel"/>
    
  481.       </rule>
    
  482.       <rule pattern="#\s*([a-zA-Z][\w&#39;]*)">
    
  483.         <token type="NameLabel"/>
    
  484.       </rule>
    
  485.       <rule pattern="#\s+([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  486.         <token type="NameLabel"/>
    
  487.       </rule>
    
  488.       <rule pattern="\b(datatype|abstype)\b(?!\&#39;)">
    
  489.         <token type="KeywordReserved"/>
    
  490.         <push state="dname"/>
    
  491.       </rule>
    
  492.       <rule pattern="(?=\b(exception)\b(?!\&#39;))">
    
  493.         <token type="Text"/>
    
  494.         <push state="ename"/>
    
  495.       </rule>
    
  496.       <rule pattern="\b(functor|include|open|signature|structure)\b(?!\&#39;)">
    
  497.         <token type="KeywordReserved"/>
    
  498.         <push state="sname"/>
    
  499.       </rule>
    
  500.       <rule pattern="\b(type|eqtype)\b(?!\&#39;)">
    
  501.         <token type="KeywordReserved"/>
    
  502.         <push state="tname"/>
    
  503.       </rule>
    
  504.       <rule pattern="\&#39;[\w\&#39;]*">
    
  505.         <token type="NameDecorator"/>
    
  506.       </rule>
    
  507.       <rule pattern="([a-zA-Z][\w&#39;]*)(\.)">
    
  508.         <token type="NameNamespace"/>
    
  509.         <push state="dotted"/>
    
  510.       </rule>
    
  511.       <rule pattern="\b(abstype|and|andalso|as|case|datatype|do|else|end|exception|fn|fun|handle|if|in|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|then|type|val|with|withtype|while|eqtype|functor|include|sharing|sig|signature|struct|structure|where)\b">
    
  512.         <token type="KeywordReserved"/>
    
  513.       </rule>
    
  514.       <rule pattern="([a-zA-Z][\w&#39;]*)">
    
  515.         <token type="Name"/>
    
  516.       </rule>
    
  517.       <rule pattern="\b(:|\|,=|=&gt;|-&gt;|#|:&gt;)\b">
    
  518.         <token type="KeywordReserved"/>
    
  519.       </rule>
    
  520.       <rule pattern="([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  521.         <token type="Name"/>
    
  522.       </rule>
    
  523.     </state>
    
  524.     <state name="fname">
    
  525.       <rule>
    
  526.         <include state="whitespace"/>
    
  527.       </rule>
    
  528.       <rule pattern="\&#39;[\w\&#39;]*">
    
  529.         <token type="NameDecorator"/>
    
  530.       </rule>
    
  531.       <rule pattern="\(">
    
  532.         <token type="Punctuation"/>
    
  533.         <push state="tyvarseq"/>
    
  534.       </rule>
    
  535.       <rule pattern="([a-zA-Z][\w&#39;]*)">
    
  536.         <token type="NameFunction"/>
    
  537.         <pop depth="1"/>
    
  538.       </rule>
    
  539.       <rule pattern="([!%&amp;$#+\-/:&lt;=&gt;?@\\~`^|*]+)">
    
  540.         <token type="NameFunction"/>
    
  541.         <pop depth="1"/>
    
  542.       </rule>
    
  543.       <rule>
    
  544.         <pop depth="1"/>
    
  545.       </rule>
    
  546.     </state>
    
  547.   </rules>
    
  548. </lexer>