1. <lexer>
    
  2.   <config>
    
  3.     <name>ISCdhcpd</name>
    
  4.     <alias>iscdhcpd</alias>
    
  5.     <filename>dhcpd.conf</filename>
    
  6.   </config>
    
  7.   <rules>
    
  8.     <state name="interpol">
    
  9.       <rule pattern="\$[{(]">
    
  10.         <token type="LiteralStringInterpol"/>
    
  11.         <push/>
    
  12.       </rule>
    
  13.       <rule pattern="[})]">
    
  14.         <token type="LiteralStringInterpol"/>
    
  15.         <pop depth="1"/>
    
  16.       </rule>
    
  17.       <rule pattern="[^${()}]+">
    
  18.         <token type="LiteralStringInterpol"/>
    
  19.       </rule>
    
  20.     </state>
    
  21.     <state name="root">
    
  22.       <rule pattern="#.*?\n">
    
  23.         <token type="Comment"/>
    
  24.       </rule>
    
  25.       <rule pattern="(hardware|packet|leased-address|host-decl-name|lease-time|max-lease-time|client-state|config-option|option|filename|next-server|allow|deny|match|ignore)\b">
    
  26.          <token type="Keyword"/>
    
  27.       </rule>
    
  28.       <rule pattern="(include|group|host|subnet|subnet6|netmask|class|subclass|pool|failover|include|shared-network|range|range6|prefix6)\b">
    
  29.          <token type="KeywordType"/>
    
  30.       </rule>
    
  31.       <rule pattern="(on|off|true|false|none)\b">
    
  32.         <token type="KeywordConstant"/>
    
  33.       </rule>
    
  34.       <rule pattern="(if|elsif|else)\b">
    
  35.         <token type="Keyword"/>
    
  36.       </rule>
    
  37.       <rule pattern="(exists|known|static)\b">
    
  38.         <token type="KeywordConstant"/>
    
  39.       </rule>
    
  40.       <rule pattern="(and|or|not)\b">
    
  41.         <token type="OperatorWord"/>
    
  42.       </rule>
    
  43.       <rule pattern="(==|!=|~=|~~|=)">
    
  44.         <token type="Operator"/>
    
  45.       </rule>
    
  46.       <rule pattern="[{},;\)]">
    
  47.         <token type="Punctuation"/>
    
  48.       </rule>
    
  49.       <rule pattern="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}">
    
  50.         <token type="LiteralNumberFloat"/>
    
  51.       </rule>
    
  52.       <rule pattern="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}">
    
  53.         <token type="LiteralNumberFloat"/>
    
  54.       </rule>
    
  55.       <rule pattern="[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}:[a-fA-F0-9]{1,2}">
    
  56.         <token type="LiteralNumberHex"/>
    
  57.       </rule>
    
  58.       <rule pattern="&#34;">
    
  59.         <token type="LiteralString"/>
    
  60.         <push state="doublequotestring"/>
    
  61.       </rule>
    
  62.       <rule pattern="([\w\-.]+)(\s*)(\()">
    
  63.         <bygroups>
    
  64.           <token type="NameFunction"/>
    
  65.           <token type="Text"/>
    
  66.           <token type="Punctuation"/>
    
  67.         </bygroups>
    
  68.       </rule>
    
  69.       <rule pattern="[\w\-.]+">
    
  70.         <token type="NameVariable"/>
    
  71.       </rule>
    
  72.       <rule pattern="\s+">
    
  73.         <token type="Text"/>
    
  74.       </rule>
    
  75.     </state>
    
  76.     <state name="doublequotestring">
    
  77.       <rule pattern="\$[{(]">
    
  78.         <token type="LiteralStringInterpol"/>
    
  79.         <push state="interpol"/>
    
  80.       </rule>
    
  81.       <rule pattern="\\.">
    
  82.         <token type="LiteralStringEscape"/>
    
  83.       </rule>
    
  84.       <rule pattern="&#34;">
    
  85.         <token type="LiteralString"/>
    
  86.         <pop depth="1"/>
    
  87.       </rule>
    
  88.       <rule pattern="\n">
    
  89.         <token type="LiteralString"/>
    
  90.       </rule>
    
  91.       <rule pattern=".">
    
  92.         <token type="LiteralString"/>
    
  93.       </rule>
    
  94.     </state>
    
  95.   </rules>
    
  96. </lexer>