1
  2<lexer>
  3  <config>
  4    <name>Promela</name>
  5    <alias>promela</alias>
  6    <filename>*.pml</filename>
  7    <filename>*.prom</filename>
  8    <filename>*.prm</filename>
  9    <filename>*.promela</filename>
 10    <filename>*.pr</filename>
 11    <filename>*.pm</filename>
 12    <mime_type>text/x-promela</mime_type>
 13  </config>
 14  <rules>
 15    <state name="statements">
 16      <rule pattern="(\[\]|<>|/\\|\\/)|(U|W|V)\b"><token type="Operator"/></rule>
 17      <rule pattern="@"><token type="Punctuation"/></rule>
 18      <rule pattern="(\.)([a-zA-Z_]\w*)"><bygroups><token type="Operator"/><token type="NameAttribute"/></bygroups></rule>
 19      <rule><include state="keywords"/></rule>
 20      <rule><include state="types"/></rule>
 21      <rule pattern="([LuU]|u8)?(")"><bygroups><token type="LiteralStringAffix"/><token type="LiteralString"/></bygroups><push state="string"/></rule>
 22      <rule pattern="([LuU]|u8)?(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringChar"/><token type="LiteralStringChar"/><token type="LiteralStringChar"/></bygroups></rule>
 23      <rule pattern="0[xX]([0-9a-fA-F](\'?[0-9a-fA-F])*\.[0-9a-fA-F](\'?[0-9a-fA-F])*|\.[0-9a-fA-F](\'?[0-9a-fA-F])*|[0-9a-fA-F](\'?[0-9a-fA-F])*)[pP][+-]?[0-9a-fA-F](\'?[0-9a-fA-F])*[lL]?"><token type="LiteralNumberFloat"/></rule>
 24      <rule pattern="(-)?(\d(\'?\d)*\.\d(\'?\d)*|\.\d(\'?\d)*|\d(\'?\d)*)[eE][+-]?\d(\'?\d)*[fFlL]?"><token type="LiteralNumberFloat"/></rule>
 25      <rule pattern="(-)?((\d(\'?\d)*\.(\d(\'?\d)*)?|\.\d(\'?\d)*)[fFlL]?)|(\d(\'?\d)*[fFlL])"><token type="LiteralNumberFloat"/></rule>
 26      <rule pattern="(-)?0[xX][0-9a-fA-F](\'?[0-9a-fA-F])*(([uU][lL]{0,2})|[lL]{1,2}[uU]?)?"><token type="LiteralNumberHex"/></rule>
 27      <rule pattern="(-)?0[bB][01](\'?[01])*(([uU][lL]{0,2})|[lL]{1,2}[uU]?)?"><token type="LiteralNumberBin"/></rule>
 28      <rule pattern="(-)?0(\'?[0-7])+(([uU][lL]{0,2})|[lL]{1,2}[uU]?)?"><token type="LiteralNumberOct"/></rule>
 29      <rule pattern="(-)?\d(\'?\d)*(([uU][lL]{0,2})|[lL]{1,2}[uU]?)?"><token type="LiteralNumberInteger"/></rule>
 30      <rule pattern="[~!%^&*+=|?:<>/-]"><token type="Operator"/></rule>
 31      <rule pattern="[()\[\],.]"><token type="Punctuation"/></rule>
 32      <rule pattern="(true|false|NULL)\b"><token type="NameBuiltin"/></rule>
 33      <rule pattern="(?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8})+"><token type="Name"/></rule>
 34    </state>
 35    <state name="types">
 36      <rule pattern="(bit|bool|byte|pid|short|int|unsigned)\b"><token type="KeywordType"/></rule>
 37    </state>
 38    <state name="keywords">
 39      <rule pattern="(atomic|break|d_step|do|od|for|in|goto|if|fi|unless)\b"><token type="Keyword"/></rule>
 40      <rule pattern="(assert|get_priority|printf|printm|set_priority)\b"><token type="NameFunction"/></rule>
 41      <rule pattern="(c_code|c_decl|c_expr|c_state|c_track)\b"><token type="Keyword"/></rule>
 42      <rule pattern="(_|_last|_nr_pr|_pid|_priority|else|np_|STDIN)\b"><token type="NameBuiltin"/></rule>
 43      <rule pattern="(empty|enabled|eval|full|len|nempty|nfull|pc_value)\b"><token type="NameFunction"/></rule>
 44      <rule pattern="run\b"><token type="OperatorWord"/></rule>
 45      <rule pattern="(active|chan|D_proctype|hidden|init|local|mtype|never|notrace|proctype|show|trace|typedef|xr|xs)\b"><token type="KeywordDeclaration"/></rule>
 46      <rule pattern="(priority|provided)\b"><token type="Keyword"/></rule>
 47      <rule pattern="(inline|ltl|select)\b"><token type="KeywordDeclaration"/></rule>
 48      <rule pattern="skip\b"><token type="Keyword"/></rule>
 49    </state>
 50    <state name="whitespace">
 51      <rule pattern="^#if\s+0"><token type="CommentPreproc"/><push state="if0"/></rule>
 52      <rule pattern="^#"><token type="CommentPreproc"/><push state="macro"/></rule>
 53      <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)"><bygroups><usingself state="root"/><token type="CommentPreproc"/></bygroups><push state="if0"/></rule>
 54      <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#)"><bygroups><usingself state="root"/><token type="CommentPreproc"/></bygroups><push state="macro"/></rule>
 55      <rule pattern="(^[ \t]*)(?!(?:public|private|protected|default)\b)((?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8})+)(\s*)(:)(?!:)"><bygroups><token type="TextWhitespace"/><token type="NameLabel"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups></rule>
 56      <rule pattern="\n"><token type="TextWhitespace"/></rule>
 57      <rule pattern="[^\S\n]+"><token type="TextWhitespace"/></rule>
 58      <rule pattern="\\\n"><token type="Text"/></rule>
 59      <rule pattern="//(?:.|(?<=\\)\n)*\n"><token type="CommentSingle"/></rule>
 60      <rule pattern="/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/"><token type="CommentMultiline"/></rule>
 61      <rule pattern="/(\\\n)?[*][\w\W]*"><token type="CommentMultiline"/></rule>
 62    </state>
 63    <state name="root">
 64      <rule><include state="whitespace"/></rule>
 65      <rule><include state="keywords"/></rule>
 66      <rule pattern="((?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|::)+(?:[&*\s])+)(\s*(?:(?:(?://(?:.|(?<=\\)\n)*\n)|(?:/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/))\s*)*)((?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|::)+)(\s*(?:(?:(?://(?:.|(?<=\\)\n)*\n)|(?:/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/))\s*)*)(\([^;"\')]*?\))(\s*(?:(?:(?://(?:.|(?<=\\)\n)*\n)|(?:/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/))\s*)*)([^;{/"\']*)(\{)"><bygroups><usingself state="root"/><usingself state="whitespace"/><token type="NameFunction"/><usingself state="whitespace"/><usingself state="root"/><usingself state="whitespace"/><usingself state="root"/><token type="Punctuation"/></bygroups><push state="function"/></rule>
 67      <rule pattern="((?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|::)+(?:[&*\s])+)(\s*(?:(?:(?://(?:.|(?<=\\)\n)*\n)|(?:/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/))\s*)*)((?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|::)+)(\s*(?:(?:(?://(?:.|(?<=\\)\n)*\n)|(?:/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/))\s*)*)(\([^;"\')]*?\))(\s*(?:(?:(?://(?:.|(?<=\\)\n)*\n)|(?:/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/))\s*)*)([^;/"\']*)(;)"><bygroups><usingself state="root"/><usingself state="whitespace"/><token type="NameFunction"/><usingself state="whitespace"/><usingself state="root"/><usingself state="whitespace"/><usingself state="root"/><token type="Punctuation"/></bygroups></rule>
 68      <rule><include state="types"/></rule>
 69      <rule><push state="statement"/></rule>
 70    </state>
 71    <state name="statement">
 72      <rule><include state="whitespace"/></rule>
 73      <rule><include state="statements"/></rule>
 74      <rule pattern="\}"><token type="Punctuation"/></rule>
 75      <rule pattern="[{;]"><token type="Punctuation"/><pop depth="1"/></rule>
 76    </state>
 77    <state name="function">
 78      <rule><include state="whitespace"/></rule>
 79      <rule><include state="statements"/></rule>
 80      <rule pattern=";"><token type="Punctuation"/></rule>
 81      <rule pattern="\{"><token type="Punctuation"/><push/></rule>
 82      <rule pattern="\}"><token type="Punctuation"/><pop depth="1"/></rule>
 83    </state>
 84    <state name="string">
 85      <rule pattern="""><token type="LiteralString"/><pop depth="1"/></rule>
 86      <rule pattern="\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})"><token type="LiteralStringEscape"/></rule>
 87      <rule pattern="[^\\"\n]+"><token type="LiteralString"/></rule>
 88      <rule pattern="\\\n"><token type="LiteralString"/></rule>
 89      <rule pattern="\\"><token type="LiteralString"/></rule>
 90    </state>
 91    <state name="macro">
 92      <rule pattern="(\s*(?:/[*].*?[*]/\s*)?)(include)(\s*(?:/[*].*?[*]/\s*)?)("[^"]+")([^\n]*)"><bygroups><usingself state="root"/><token type="CommentPreproc"/><usingself state="root"/><token type="CommentPreprocFile"/><token type="CommentSingle"/></bygroups></rule>
 93      <rule pattern="(\s*(?:/[*].*?[*]/\s*)?)(include)(\s*(?:/[*].*?[*]/\s*)?)(<[^>]+>)([^\n]*)"><bygroups><usingself state="root"/><token type="CommentPreproc"/><usingself state="root"/><token type="CommentPreprocFile"/><token type="CommentSingle"/></bygroups></rule>
 94      <rule pattern="[^/\n]+"><token type="CommentPreproc"/></rule>
 95      <rule pattern="/[*](.|\n)*?[*]/"><token type="CommentMultiline"/></rule>
 96      <rule pattern="//.*?\n"><token type="CommentSingle"/><pop depth="1"/></rule>
 97      <rule pattern="/"><token type="CommentPreproc"/></rule>
 98      <rule pattern="(?<=\\)\n"><token type="CommentPreproc"/></rule>
 99      <rule pattern="\n"><token type="CommentPreproc"/><pop depth="1"/></rule>
100    </state>
101    <state name="if0">
102      <rule pattern="^\s*#if.*?(?<!\\)\n"><token type="CommentPreproc"/><push/></rule>
103      <rule pattern="^\s*#el(?:se|if).*\n"><token type="CommentPreproc"/><pop depth="1"/></rule>
104      <rule pattern="^\s*#endif.*?(?<!\\)\n"><token type="CommentPreproc"/><pop depth="1"/></rule>
105      <rule pattern=".*?\n"><token type="Comment"/></rule>
106    </state>
107    <state name="classname">
108      <rule pattern="(?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8})+"><token type="NameClass"/><pop depth="1"/></rule>
109      <rule pattern="\s*(?=>)"><token type="Text"/><pop depth="1"/></rule>
110      <rule><pop depth="1"/></rule>
111    </state>
112    <state name="case-value">
113      <rule pattern="(?<!:)(:)(?!:)"><token type="Punctuation"/><pop depth="1"/></rule>
114      <rule pattern="(?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8})+"><token type="NameConstant"/></rule>
115      <rule><include state="whitespace"/></rule>
116      <rule><include state="statements"/></rule>
117    </state>
118  </rules>
119</lexer>