1. <lexer>
    
  2.   <config>
    
  3.     <name>Fortran</name>
    
  4.     <alias>fortran</alias>
    
  5.     <alias>f90</alias>
    
  6.     <filename>*.f03</filename>
    
  7.     <filename>*.f90</filename>
    
  8.     <filename>*.f95</filename>
    
  9.     <filename>*.F03</filename>
    
  10.     <filename>*.F90</filename>
    
  11.     <filename>*.F95</filename>
    
  12.     <mime_type>text/x-fortran</mime_type>
    
  13.     <case_insensitive>true</case_insensitive>
    
  14.   </config>
    
  15.   <rules>
    
  16.     <state name="core">
    
  17.       <rule pattern="\b(DO)(\s+)(CONCURRENT)\b">
    
  18.         <bygroups>
    
  19.           <token type="Keyword"/>
    
  20.           <token type="TextWhitespace"/>
    
  21.           <token type="Keyword"/>
    
  22.         </bygroups>
    
  23.       </rule>
    
  24.       <rule pattern="\b(GO)(\s*)(TO)\b">
    
  25.         <bygroups>
    
  26.           <token type="Keyword"/>
    
  27.           <token type="TextWhitespace"/>
    
  28.           <token type="Keyword"/>
    
  29.         </bygroups>
    
  30.       </rule>
    
  31.       <rule pattern="\b(ABSTRACT|ACCEPT|ALL|ALLSTOP|ALLOCATABLE|ALLOCATE|ARRAY|ASSIGN|ASSOCIATE|ASYNCHRONOUS|BACKSPACE|BIND|BLOCK|BLOCKDATA|BYTE|CALL|CASE|CLASS|CLOSE|CODIMENSION|COMMON|CONTIGUOUS|CONTAINS|CONTINUE|CRITICAL|CYCLE|DATA|DEALLOCATE|DECODE|DEFERRED|DIMENSION|DO|ELEMENTAL|ELSE|ENCODE|END|ENDASSOCIATE|ENDBLOCK|ENDDO|ENDENUM|ENDFORALL|ENDFUNCTION|ENDIF|ENDINTERFACE|ENDMODULE|ENDPROGRAM|ENDSELECT|ENDSUBMODULE|ENDSUBROUTINE|ENDTYPE|ENDWHERE|ENTRY|ENUM|ENUMERATOR|EQUIVALENCE|ERROR STOP|EXIT|EXTENDS|EXTERNAL|EXTRINSIC|FILE|FINAL|FORALL|FORMAT|FUNCTION|GENERIC|IF|IMAGES|IMPLICIT|IMPORT|IMPURE|INCLUDE|INQUIRE|INTENT|INTERFACE|INTRINSIC|IS|LOCK|MEMORY|MODULE|NAMELIST|NULLIFY|NONE|NON_INTRINSIC|NON_OVERRIDABLE|NOPASS|ONLY|OPEN|OPTIONAL|OPTIONS|PARAMETER|PASS|PAUSE|POINTER|PRINT|PRIVATE|PROGRAM|PROCEDURE|PROTECTED|PUBLIC|PURE|READ|RECURSIVE|RESULT|RETURN|REWIND|SAVE|SELECT|SEQUENCE|STOP|SUBMODULE|SUBROUTINE|SYNC|SYNCALL|SYNCIMAGES|SYNCMEMORY|TARGET|THEN|TYPE|UNLOCK|USE|VALUE|VOLATILE|WHERE|WRITE|WHILE)\b">
    
  32.         <token type="Keyword"/>
    
  33.       </rule>
    
  34.       <rule pattern="\b(CHARACTER|COMPLEX|DOUBLE PRECISION|DOUBLE COMPLEX|INTEGER|LOGICAL|REAL|C_INT|C_SHORT|C_LONG|C_LONG_LONG|C_SIGNED_CHAR|C_SIZE_T|C_INT8_T|C_INT16_T|C_INT32_T|C_INT64_T|C_INT_LEAST8_T|C_INT_LEAST16_T|C_INT_LEAST32_T|C_INT_LEAST64_T|C_INT_FAST8_T|C_INT_FAST16_T|C_INT_FAST32_T|C_INT_FAST64_T|C_INTMAX_T|C_INTPTR_T|C_FLOAT|C_DOUBLE|C_LONG_DOUBLE|C_FLOAT_COMPLEX|C_DOUBLE_COMPLEX|C_LONG_DOUBLE_COMPLEX|C_BOOL|C_CHAR|C_PTR|C_FUNPTR)\b">
    
  35.         <token type="Keyword"/>
    
  36.       </rule>
    
  37.       <rule pattern="(\*\*|\*|\+|-|\/|&lt;|&gt;|&lt;=|&gt;=|==|\/=|=)">
    
  38.         <token type="Operator"/>
    
  39.       </rule>
    
  40.       <rule pattern="(::)">
    
  41.         <token type="KeywordDeclaration"/>
    
  42.       </rule>
    
  43.       <rule pattern="[()\[\],:&amp;%;.]">
    
  44.         <token type="Punctuation"/>
    
  45.       </rule>
    
  46.       <rule pattern="\b(Abort|Abs|Access|AChar|ACos|ACosH|AdjustL|AdjustR|AImag|AInt|Alarm|All|Allocated|ALog|AMax|AMin|AMod|And|ANInt|Any|ASin|ASinH|Associated|ATan|ATanH|Atomic_Define|Atomic_Ref|BesJ|BesJN|Bessel_J0|Bessel_J1|Bessel_JN|Bessel_Y0|Bessel_Y1|Bessel_YN|BesY|BesYN|BGE|BGT|BLE|BLT|Bit_Size|BTest|CAbs|CCos|Ceiling|CExp|Char|ChDir|ChMod|CLog|Cmplx|Command_Argument_Count|Complex|Conjg|Cos|CosH|Count|CPU_Time|CShift|CSin|CSqRt|CTime|C_Loc|C_Associated|C_Null_Ptr|C_Null_Funptr|C_F_Pointer|C_F_ProcPointer|C_Null_Char|C_Alert|C_Backspace|C_Form_Feed|C_FunLoc|C_Sizeof|C_New_Line|C_Carriage_Return|C_Horizontal_Tab|C_Vertical_Tab|DAbs|DACos|DASin|DATan|Date_and_Time|DbesJ|DbesJN|DbesY|DbesYN|Dble|DCos|DCosH|DDiM|DErF|DErFC|DExp|Digits|DiM|DInt|DLog|DMax|DMin|DMod|DNInt|Dot_Product|DProd|DSign|DSinH|DShiftL|DShiftR|DSin|DSqRt|DTanH|DTan|DTime|EOShift|Epsilon|ErF|ErFC|ErFC_Scaled|ETime|Execute_Command_Line|Exit|Exp|Exponent|Extends_Type_Of|FDate|FGet|FGetC|FindLoc|Float|Floor|Flush|FNum|FPutC|FPut|Fraction|FSeek|FStat|FTell|Gamma|GError|GetArg|Get_Command|Get_Command_Argument|Get_Environment_Variable|GetCWD|GetEnv|GetGId|GetLog|GetPId|GetUId|GMTime|HostNm|Huge|Hypot|IAbs|IAChar|IAll|IAnd|IAny|IArgC|IBClr|IBits|IBSet|IChar|IDate|IDiM|IDInt|IDNInt|IEOr|IErrNo|IFix|Imag|ImagPart|Image_Index|Index|Int|IOr|IParity|IRand|IsaTty|IShft|IShftC|ISign|Iso_C_Binding|Is_Contiguous|Is_Iostat_End|Is_Iostat_Eor|ITime|Kill|Kind|LBound|LCoBound|Len|Len_Trim|LGe|LGt|Link|LLe|LLt|LnBlnk|Loc|Log|Log_Gamma|Logical|Long|LShift|LStat|LTime|MaskL|MaskR|MatMul|Max|MaxExponent|MaxLoc|MaxVal|MClock|Merge|Merge_Bits|Move_Alloc|Min|MinExponent|MinLoc|MinVal|Mod|Modulo|MvBits|Nearest|New_Line|NInt|Norm2|Not|Null|Num_Images|Or|Pack|Parity|PError|Precision|Present|Product|Radix|Rand|Random_Number|Random_Seed|Range|Real|RealPart|Rename|Repeat|Reshape|RRSpacing|RShift|Same_Type_As|Scale|Scan|Second|Selected_Char_Kind|Selected_Int_Kind|Selected_Real_Kind|Set_Exponent|Shape|ShiftA|ShiftL|ShiftR|Short|Sign|Signal|SinH|Sin|Sleep|Sngl|Spacing|Spread|SqRt|SRand|Stat|Storage_Size|Sum|SymLnk|System|System_Clock|Tan|TanH|Time|This_Image|Tiny|TrailZ|Transfer|Transpose|Trim|TtyNam|UBound|UCoBound|UMask|Unlink|Unpack|Verify|XOr|ZAbs|ZCos|ZExp|ZLog|ZSin|ZSqRt)\b">
    
  47.         <token type="NameBuiltin"/>
    
  48.       </rule>
    
  49.       <rule pattern="\.(true|false)\.">
    
  50.         <token type="NameBuiltin"/>
    
  51.       </rule>
    
  52.       <rule pattern="\.(eq|ne|lt|le|gt|ge|not|and|or|eqv|neqv)\.">
    
  53.         <token type="OperatorWord"/>
    
  54.       </rule>
    
  55.     </state>
    
  56.     <state name="strings">
    
  57.       <rule pattern="(?s)&#34;(\\\\|\\[0-7]+|\\.|[^&#34;\\])*&#34;">
    
  58.         <token type="LiteralStringDouble"/>
    
  59.       </rule>
    
  60.       <rule pattern="(?s)&#39;(\\\\|\\[0-7]+|\\.|[^&#39;\\])*&#39;">
    
  61.         <token type="LiteralStringSingle"/>
    
  62.       </rule>
    
  63.     </state>
    
  64.     <state name="nums">
    
  65.       <rule pattern="\d+(?![.e])(_([1-9]|[a-z]\w*))?">
    
  66.         <token type="LiteralNumberInteger"/>
    
  67.       </rule>
    
  68.       <rule pattern="[+-]?\d*\.\d+([ed][-+]?\d+)?(_([1-9]|[a-z]\w+))?">
    
  69.         <token type="LiteralNumberFloat"/>
    
  70.       </rule>
    
  71.       <rule pattern="[+-]?\d+\.\d*([ed][-+]?\d+)?(_([1-9]|[a-z]\w*))?">
    
  72.         <token type="LiteralNumberFloat"/>
    
  73.       </rule>
    
  74.       <rule pattern="[+-]?\d+(\.\d*)?[ed][-+]?\d+(_([1-9]|[a-z]\w*))?">
    
  75.         <token type="LiteralNumberFloat"/>
    
  76.       </rule>
    
  77.     </state>
    
  78.     <state name="root">
    
  79.       <rule pattern="^#.*\n">
    
  80.         <token type="CommentPreproc"/>
    
  81.       </rule>
    
  82.       <rule pattern="!.*\n">
    
  83.         <token type="Comment"/>
    
  84.       </rule>
    
  85.       <rule>
    
  86.         <include state="strings"/>
    
  87.       </rule>
    
  88.       <rule>
    
  89.         <include state="core"/>
    
  90.       </rule>
    
  91.       <rule pattern="[a-z][\w$]*">
    
  92.         <token type="Name"/>
    
  93.       </rule>
    
  94.       <rule>
    
  95.         <include state="nums"/>
    
  96.       </rule>
    
  97.       <rule pattern="[\s]+">
    
  98.         <token type="TextWhitespace"/>
    
  99.       </rule>
    
  100.     </state>
    
  101.   </rules>
    
  102. </lexer>