1. <lexer>
    
  2.   <config>
    
  3.     <name>Puppet</name>
    
  4.     <alias>puppet</alias>
    
  5.     <filename>*.pp</filename>
    
  6.   </config>
    
  7.   <rules>
    
  8.     <state name="strings">
    
  9.       <rule pattern="&#34;([^&#34;])*&#34;">
    
  10.         <token type="LiteralString"/>
    
  11.       </rule>
    
  12.       <rule pattern="&#39;(\\&#39;|[^&#39;])*&#39;">
    
  13.         <token type="LiteralString"/>
    
  14.       </rule>
    
  15.     </state>
    
  16.     <state name="root">
    
  17.       <rule>
    
  18.         <include state="comments"/>
    
  19.       </rule>
    
  20.       <rule>
    
  21.         <include state="keywords"/>
    
  22.       </rule>
    
  23.       <rule>
    
  24.         <include state="names"/>
    
  25.       </rule>
    
  26.       <rule>
    
  27.         <include state="numbers"/>
    
  28.       </rule>
    
  29.       <rule>
    
  30.         <include state="operators"/>
    
  31.       </rule>
    
  32.       <rule>
    
  33.         <include state="strings"/>
    
  34.       </rule>
    
  35.       <rule pattern="[]{}:(),;[]">
    
  36.         <token type="Punctuation"/>
    
  37.       </rule>
    
  38.       <rule pattern="[^\S\n]+">
    
  39.         <token type="Text"/>
    
  40.       </rule>
    
  41.     </state>
    
  42.     <state name="comments">
    
  43.       <rule pattern="\s*#.*$">
    
  44.         <token type="Comment"/>
    
  45.       </rule>
    
  46.       <rule pattern="/(\\\n)?[*](.|\n)*?[*](\\\n)?/">
    
  47.         <token type="CommentMultiline"/>
    
  48.       </rule>
    
  49.     </state>
    
  50.     <state name="operators">
    
  51.       <rule pattern="(=&gt;|\?|&lt;|&gt;|=|\+|-|/|\*|~|!|\|)">
    
  52.         <token type="Operator"/>
    
  53.       </rule>
    
  54.       <rule pattern="(in|and|or|not)\b">
    
  55.         <token type="OperatorWord"/>
    
  56.       </rule>
    
  57.     </state>
    
  58.     <state name="names">
    
  59.       <rule pattern="[a-zA-Z_]\w*">
    
  60.         <token type="NameAttribute"/>
    
  61.       </rule>
    
  62.       <rule pattern="(\$\S+)(\[)(\S+)(\])">
    
  63.         <bygroups>
    
  64.           <token type="NameVariable"/>
    
  65.           <token type="Punctuation"/>
    
  66.           <token type="LiteralString"/>
    
  67.           <token type="Punctuation"/>
    
  68.         </bygroups>
    
  69.       </rule>
    
  70.       <rule pattern="\$\S+">
    
  71.         <token type="NameVariable"/>
    
  72.       </rule>
    
  73.     </state>
    
  74.     <state name="numbers">
    
  75.       <rule pattern="(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?">
    
  76.         <token type="LiteralNumberFloat"/>
    
  77.       </rule>
    
  78.       <rule pattern="\d+[eE][+-]?[0-9]+j?">
    
  79.         <token type="LiteralNumberFloat"/>
    
  80.       </rule>
    
  81.       <rule pattern="0[0-7]+j?">
    
  82.         <token type="LiteralNumberOct"/>
    
  83.       </rule>
    
  84.       <rule pattern="0[xX][a-fA-F0-9]+">
    
  85.         <token type="LiteralNumberHex"/>
    
  86.       </rule>
    
  87.       <rule pattern="\d+L">
    
  88.         <token type="LiteralNumberIntegerLong"/>
    
  89.       </rule>
    
  90.       <rule pattern="\d+j?">
    
  91.         <token type="LiteralNumberInteger"/>
    
  92.       </rule>
    
  93.     </state>
    
  94.     <state name="keywords">
    
  95.       <rule pattern="(?i)(nagios_servicedependency|nagios_serviceescalation|nagios_hostdependency|nagios_hostescalation|nagios_serviceextinfo|nagios_contactgroup|nagios_servicegroup|ssh_authorized_key|nagios_hostextinfo|nagios_timeperiod|nagios_hostgroup|macauthorization|create_resources|inline_template|scheduled_task|nagios_contact|nagios_command|nagios_service|nagios_host|configured|versioncmp|selboolean|filebucket|shellquote|selmodule|extlookup|unmounted|interface|contained|resources|fqdn_rand|installed|mailalias|directory|subscribe|loglevel|computer|maillist|schedule|generate|template|regsubst|inherits|present|sprintf|service|stopped|running|package|realize|defined|mounted|warning|yumrepo|k5login|include|default|notice|purged|latest|router|search|sshkey|define|notify|absent|before|augeas|import|tagged|split|undef|mount|check|alert|class|audit|debug|alias|stage|elsif|false|zpool|emerg|noop|sha1|vlan|exec|fail|file|else|host|info|cron|role|link|zone|tidy|true|node|case|user|crit|err|mcx|zfs|md5|tag|if)\b">
    
  96.         <token type="Keyword"/>
    
  97.       </rule>
    
  98.     </state>
    
  99.   </rules>
    
  100. </lexer>