1<lexer>
  2  <config>
  3    <name>R</name>
  4    <alias>splus</alias>
  5    <alias>s</alias>
  6    <alias>r</alias>
  7    <filename>*.S</filename>
  8    <filename>*.R</filename>
  9    <filename>*.r</filename>
 10    <filename>.Rhistory</filename>
 11    <filename>.Rprofile</filename>
 12    <filename>.Renviron</filename>
 13    <mime_type>text/S-plus</mime_type>
 14    <mime_type>text/S</mime_type>
 15    <mime_type>text/x-r-source</mime_type>
 16    <mime_type>text/x-r</mime_type>
 17    <mime_type>text/x-R</mime_type>
 18    <mime_type>text/x-r-history</mime_type>
 19    <mime_type>text/x-r-profile</mime_type>
 20  </config>
 21  <rules>
 22    <state name="numbers">
 23      <rule pattern="0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?">
 24        <token type="LiteralNumberHex"/>
 25      </rule>
 26      <rule pattern="[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+|\.)([eE][+-]?[0-9]+)?[Li]?">
 27        <token type="LiteralNumber"/>
 28      </rule>
 29    </state>
 30    <state name="operators">
 31      <rule pattern="&lt;&lt;?-|-&gt;&gt;?|-|==|&lt;=|&gt;=|&lt;|&gt;|&amp;&amp;?|!=|\|\|?|\?">
 32        <token type="Operator"/>
 33      </rule>
 34      <rule pattern="\*|\+|\^|/|!|%[^%]*%|=|~|\$|@|:{1,3}">
 35        <token type="Operator"/>
 36      </rule>
 37    </state>
 38    <state name="root">
 39      <rule pattern="((?:`[^`\\]*(?:\\.[^`\\]*)*`)|(?:(?:[a-zA-z]|[_.][^0-9])[\w_.]*))\s*(?=\()">
 40        <token type="NameFunction"/>
 41      </rule>
 42      <rule>
 43        <include state="statements"/>
 44      </rule>
 45      <rule pattern="\{|\}">
 46        <token type="Punctuation"/>
 47      </rule>
 48      <rule pattern=".">
 49        <token type="Text"/>
 50      </rule>
 51    </state>
 52    <state name="valid_name">
 53      <rule pattern="(?:`[^`\\]*(?:\\.[^`\\]*)*`)|(?:(?:[a-zA-z]|[_.][^0-9])[\w_.]*)">
 54        <token type="Name"/>
 55      </rule>
 56    </state>
 57    <state name="keywords">
 58      <rule pattern="(if|else|for|while|repeat|in|next|break|return|switch|function)(?![\w.])">
 59        <token type="KeywordReserved"/>
 60      </rule>
 61    </state>
 62    <state name="builtin_symbols">
 63      <rule pattern="(NULL|NA(_(integer|real|complex|character)_)?|letters|LETTERS|Inf|TRUE|FALSE|NaN|pi|\.\.(\.|[0-9]+))(?![\w.])">
 64        <token type="KeywordConstant"/>
 65      </rule>
 66      <rule pattern="(T|F)\b">
 67        <token type="NameBuiltinPseudo"/>
 68      </rule>
 69    </state>
 70    <state name="string_squote">
 71      <rule pattern="([^\&#39;\\]|\\.)*\&#39;">
 72        <token type="LiteralString"/>
 73        <pop depth="1"/>
 74      </rule>
 75    </state>
 76    <state name="comments">
 77      <rule pattern="#.*$">
 78        <token type="CommentSingle"/>
 79      </rule>
 80    </state>
 81    <state name="punctuation">
 82      <rule pattern="\[{1,2}|\]{1,2}|\(|\)|;|,">
 83        <token type="Punctuation"/>
 84      </rule>
 85    </state>
 86    <state name="statements">
 87      <rule>
 88        <include state="comments"/>
 89      </rule>
 90      <rule pattern="\s+">
 91        <token type="Text"/>
 92      </rule>
 93      <rule pattern="\&#39;">
 94        <token type="LiteralString"/>
 95        <push state="string_squote"/>
 96      </rule>
 97      <rule pattern="\&#34;">
 98        <token type="LiteralString"/>
 99        <push state="string_dquote"/>
100      </rule>
101      <rule>
102        <include state="builtin_symbols"/>
103      </rule>
104      <rule>
105        <include state="valid_name"/>
106      </rule>
107      <rule>
108        <include state="numbers"/>
109      </rule>
110      <rule>
111        <include state="keywords"/>
112      </rule>
113      <rule>
114        <include state="punctuation"/>
115      </rule>
116      <rule>
117        <include state="operators"/>
118      </rule>
119    </state>
120    <state name="string_dquote">
121      <rule pattern="([^&#34;\\]|\\.)*&#34;">
122        <token type="LiteralString"/>
123        <pop depth="1"/>
124      </rule>
125    </state>
126  </rules>
127</lexer>