Warning, /frameworks/syntax-highlighting/data/syntax/vhdl.xml is written in an unsupported language. File is not indexed.
0001 <?xml version="1.0" encoding="UTF-8"?>
0002 <!DOCTYPE language [
0003 <!ENTITY varname "[A-Za-z_][A-Za-z0-9_]*">
0004 <!ENTITY identifier "(?:\b&varname;\b|\\[^\\]*\\)">
0005 <!ENTITY designator "(?:\b&varname;\b|\\[^\\]*\\|"[^"]*")">
0006 <!ENTITY label "\b&varname;(?=\s*:(?!=))">
0007 <!ENTITY bos "\b"> <!-- bol or space following -->
0008 ]>
0009 <language name="VHDL" version="16" kateversion="5.62" section="Hardware" extensions="*.vhdl;*.vhd" mimetype="text/x-vhdl" author="Rocky Scaletta (rocky@purdue.edu), Stefan Endrullis (stefan@endrullis.de), Florent Ouchet (outchy@users.sourceforge.net), Chris Higgs (chiggs.99@gmail.com), Jan Michel (jan@mueschelsoft.de), Luigi Calligaris (luigi.calligaris@stfc.ac.uk)">
0010 <!-- BNF: https://github.com/antlr/grammars-v4/blob/master/vhdl/vhdl.g4 (VHDL-2005) -->
0011 <!-- Based on VHDL-2008 -->
0012 <highlighting>
0013 <list name="keywordsToplevel">
0014 <item>file</item>
0015 <item>library</item>
0016 <item>use</item>
0017 <item>with</item>
0018 </list>
0019
0020 <list name="keywords">
0021 <item>access</item>
0022 <item>after</item>
0023 <item>alias</item>
0024 <item>all</item>
0025 <item>array</item>
0026 <item>assert</item>
0027 <item>assume</item>
0028 <item>assume_guarantee</item>
0029 <item>attribute</item>
0030 <item>begin</item>
0031 <item>block</item>
0032 <item>body</item>
0033 <item>bus</item>
0034 <item>case</item>
0035 <item>component</item>
0036 <item>constant</item>
0037 <item>context</item>
0038 <item>cover</item>
0039 <item>default</item>
0040 <item>disconnect</item>
0041 <item>downto</item>
0042 <item>else</item>
0043 <item>elsif</item>
0044 <item>end</item>
0045 <item>fairness</item>
0046 <item>falling_edge</item>
0047 <item>false</item>
0048 <item>file</item>
0049 <item>for</item>
0050 <item>force</item>
0051 <item>function</item>
0052 <item>generate</item>
0053 <item>generic</item>
0054 <item>group</item>
0055 <item>guarded</item>
0056 <item>if</item>
0057 <item>impure</item>
0058 <item>inertial</item>
0059 <item>is</item>
0060 <item>label</item>
0061 <item>linkage</item>
0062 <item>literal</item>
0063 <item>map</item>
0064 <item>new</item>
0065 <item>null</item>
0066 <item>of</item>
0067 <item>on</item>
0068 <item>open</item>
0069 <item>others</item>
0070 <item>package</item>
0071 <item>parameter</item>
0072 <item>port</item>
0073 <item>postponed</item>
0074 <item>procedure</item>
0075 <item>process</item>
0076 <item>property</item>
0077 <item>protected</item>
0078 <item>pure</item>
0079 <item>range</item>
0080 <item>record</item>
0081 <item>register</item>
0082 <item>reject</item>
0083 <item>release</item>
0084 <item>report</item>
0085 <item>rising_edge</item>
0086 <item>select</item>
0087 <item>sequence</item>
0088 <item>severity</item>
0089 <item>signal</item>
0090 <item>shared</item>
0091 <item>strong</item>
0092 <item>subtype</item>
0093 <item>then</item>
0094 <item>to</item>
0095 <item>transport</item>
0096 <item>true</item>
0097 <item>type</item>
0098 <item>use</item>
0099 <item>unaffected</item>
0100 <item>units</item>
0101 <item>until</item>
0102 <item>variable</item>
0103 <item>view</item>
0104 <item>vmode</item>
0105 <item>vprop</item>
0106 <item>vunit</item>
0107 <item>wait</item>
0108 <item>when</item>
0109 <item>with</item>
0110 <item>note</item>
0111 <item>warning</item>
0112 <item>error</item>
0113 <item>failure</item>
0114 <item>in</item>
0115 <item>inout</item>
0116 <item>out</item>
0117 <item>buffer</item>
0118 <item>and</item>
0119 <item>abs</item>
0120 <item>or</item>
0121 <item>xor</item>
0122 <item>xnor</item>
0123 <item>not</item>
0124 <item>mod</item>
0125 <item>nand</item>
0126 <item>nor</item>
0127 <item>rem</item>
0128 <item>rol</item>
0129 <item>ror</item>
0130 <item>sla</item>
0131 <item>sra</item>
0132 <item>sll</item>
0133 <item>srl</item>
0134 </list>
0135
0136 <list name="controls">
0137 <item>exit</item>
0138 <item>next</item>
0139 <item>return</item>
0140 </list>
0141
0142 <list name="signals">
0143 <item>signal</item>
0144 <item>variable</item>
0145 <item>constant</item>
0146 <item>type</item>
0147 <item>attribute</item>
0148 </list>
0149
0150 <list name="range">
0151 <item>to</item>
0152 <item>downto</item>
0153 <item>others</item>
0154 </list>
0155
0156 <list name="timeunits">
0157 <item>fs</item>
0158 <item>ps</item>
0159 <item>ns</item>
0160 <item>us</item>
0161 <item>ms</item>
0162 <item>sec</item>
0163 <item>min</item>
0164 <item>hr</item>
0165 </list>
0166
0167 <list name="types">
0168 <item>bit</item>
0169 <item>bit_vector</item>
0170 <item>character</item>
0171 <item>boolean</item>
0172 <item>boolean_vector</item>
0173 <item>integer</item>
0174 <item>integer_vector</item>
0175 <item>real</item>
0176 <item>real_vector</item>
0177 <item>time</item>
0178 <item>time_vector</item>
0179 <item>delay_length</item>
0180 <item>string</item>
0181 <item>severity_level</item>
0182 <item>positive</item>
0183 <item>natural</item>
0184 <item>file_open_kind</item>
0185 <item>file_open_status</item>
0186 <item>signed</item>
0187 <item>unsigned</item>
0188 <item>unresolved_unsigned</item>
0189 <item>unresolved_signed</item>
0190 <item>line</item>
0191 <item>text</item>
0192 <item>side</item>
0193 <item>width</item>
0194 <item>std_logic</item>
0195 <item>std_logic_vector</item>
0196 <item>std_ulogic</item>
0197 <item>std_ulogic_vector</item>
0198 <item>x01</item>
0199 <item>x01z</item>
0200 <item>ux01</item>
0201 <item>ux01z</item>
0202 <item>qsim_state</item>
0203 <item>qsim_state_vector</item>
0204 <item>qsim_12state</item>
0205 <item>qsim_12state_vector</item>
0206 <item>qsim_strength</item>
0207 <item>mux_bit</item>
0208 <item>mux_vector</item>
0209 <item>reg_bit</item>
0210 <item>reg_vector</item>
0211 <item>wor_bit</item>
0212 <item>wor_vector</item>
0213 </list>
0214
0215 <list name="instantiated">
0216 <item>configuration</item>
0217 <item>component</item>
0218 <item>entity</item>
0219 </list>
0220
0221 <contexts>
0222
0223
0224 <!-- start / global environment -->
0225 <context name="start" attribute="Normal Text" lineEndContext="#stay">
0226 <IncludeRules context="preExpression"/>
0227
0228 <WordDetect attribute="Control" context="entity" insensitive="1" String="entity"/>
0229 <WordDetect attribute="Control" context="configuration" insensitive="1" String="configuration"/>
0230 <WordDetect attribute="Control" context="architecture" insensitive="1" String="architecture"/>
0231 <WordDetect attribute="Control" context="package" insensitive="1" String="package"/>
0232 <WordDetect attribute="Keyword" context="context" insensitive="1" String="context"/>
0233
0234 <keyword attribute="Keyword" context="#stay" String="keywordsToplevel"/>
0235
0236 <WordDetect attribute="Signal" context="type" insensitive="1" String="type"/>
0237 <WordDetect attribute="Redirection" context="function" insensitive="1" String="function"/>
0238 <WordDetect attribute="Keyword" context="procedure" insensitive="1" String="procedure" beginRegion="ProcedureRegion1"/>
0239 <WordDetect attribute="Control" context="component" insensitive="1" String="component"/>
0240 <WordDetect attribute="Keyword" context="view" insensitive="1" String="view" beginRegion="sig"/>
0241 <keyword attribute="Data Type" context="#stay" String="types"/>
0242 <keyword attribute="Data Type" context="#stay" String="timeunits"/>
0243 <keyword attribute="Range" context="#stay" String="range"/>
0244 <keyword attribute="Signal" context="signal" String="signals"/>
0245 <keyword attribute="Keyword" context="#stay" String="keywords"/>
0246 <keyword attribute="Control" context="#stay" String="controls"/>
0247 <DetectIdentifier attribute="Normal Text"/>
0248 </context>
0249
0250 <!--
0251 package ::=
0252 *package* identifier *is* *new* name
0253 [ *generic* *map* ( association_list ) ] ;
0254
0255 | *package* identifier *is*
0256 [ *generic* ( interface_list ) ;
0257 [ *generic* *map* ( association_list ) ; ] ]
0258 { package_declarative_item }
0259 *end* [ *package* ] [ identifier ] ;
0260
0261 | *package *body* identifier *is*
0262 { process_declarative_item }
0263 *end* [ *package* *body* ] [ identifier ] ;
0264 -->
0265 <context name="package" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
0266 <IncludeRules context="blank"/>
0267 <WordDetect attribute="Control" context="#pop!packagebody" insensitive="true" String="body"/>
0268 <RegExpr attribute="Name" context="package_main" beginRegion="PackageRegion1"
0269 String="(&identifier;)"/>
0270 </context>
0271
0272 <context name="package_main" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="package_is">
0273 <RegExpr attribute="Control" context="#pop#pop" dynamic="1" insensitive="1"
0274 String="&bos;end(\s+package\b)?(\s+%1)?\s*;" endRegion="PackageRegion1"/>
0275 <WordDetect attribute="Error" context="#pop#pop!expressionError" insensitive="true"
0276 String="end" endRegion="PackageRegion1"/>
0277 </context>
0278
0279 <context name="package_is" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!package_decl">
0280 <IncludeRules context="blank"/>
0281 <WordDetect attribute="Keyword" insensitive="1" String="is"/>
0282 <WordDetect attribute="Keyword" insensitive="1" String="new" context="#pop#pop#pop!package_is_new"/>
0283 </context>
0284
0285 <context name="package_is_new" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!package_is_new_main">
0286 <IncludeRules context="blank"/>
0287 <IncludeRules context="pop_end"/>
0288 <DetectIdentifier attribute="Name" context="#pop!package_is_new_main"/>
0289 <RangeDetect attribute="Name" context="#pop!package_is_new_main" char=""" char1="""/>
0290 <RangeDetect attribute="Name" context="#pop!package_is_new_main" char="\" char1="\"/>
0291 </context>
0292
0293 <context name="package_is_new_main" attribute="Normal Text" lineEndContext="#stay">
0294 <IncludeRules context="blank"/>
0295 <DetectChar attribute="Normal Text" context="#pop" char=";" endRegion="PackageRegion1"/>
0296 <DetectChar attribute="Operator" char="."/>
0297 <IncludeRules context="pop_end"/>
0298 <IncludeRules context="find_instantiated_map"/>
0299 </context>
0300
0301 <context name="package_decl" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!package_declarative_list">
0302 <IncludeRules context="blank"/>
0303 <DetectChar attribute="Normal Text" char=";"/>
0304 <IncludeRules context="enclosed_interface_list"/>
0305 <IncludeRules context="find_instantiated_map"/>
0306 <WordDetect attribute="Control" insensitive="true" String="generic"/>
0307 </context>
0308
0309 <context name="package_declarative_list" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
0310 <IncludeRules context="blank"/>
0311 <IncludeRules context="package_declarative_start_expr"/>
0312 <IncludeRules context="start_simple_expr"/>
0313 </context>
0314
0315 <!-- package body environment -->
0316
0317 <context name="packagebody" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
0318 <IncludeRules context="blank"/>
0319 <RegExpr attribute="Name" context="packagebody_main" beginRegion="PackageBodyRegion1"
0320 String="(&identifier;)"/>
0321 </context>
0322
0323 <context name="packagebody_main" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="packagebody_is">
0324 <RegExpr attribute="Control" context="#pop#pop" dynamic="1" insensitive="1"
0325 String="&bos;end(\s+package\s+body\b)?(\s+%1)?\s*;" endRegion="PackageBodyRegion1"/>
0326 <WordDetect attribute="Error" context="#pop#pop!expressionError" insensitive="true"
0327 String="end" endRegion="PackageBodyRegion1"/>
0328 </context>
0329
0330 <context name="packagebody_is" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!package_declarative_list">
0331 <IncludeRules context="blank"/>
0332 <WordDetect attribute="Keyword" context="#pop!package_declarative_list" insensitive="1" String="is"/>
0333 </context>
0334
0335 <!--
0336 architecture ::=
0337 *architecture* identifier *of* name *is*
0338 { block_declarative_item }
0339 *begin*
0340 { concurrent_statement }
0341 *end* [ *architecture* ] [ identifier ] ;
0342 -->
0343 <context name="architecture" attribute="Normal Text" lineEndContext="#stay">
0344 <IncludeRules context="blank"/>
0345 <RegExpr attribute="Name" context="arch_end" beginRegion="ArchitectureRegion1"
0346 String="(&identifier;)"/>
0347 </context>
0348
0349 <context name="arch_end" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="arch_of">
0350 <RegExpr attribute="Control" context="#pop#pop" insensitive="1" dynamic="1"
0351 String="&bos;end(\s+architecture\b)?(\s+%1)?\s*;" endRegion="ArchitectureRegion1"/>
0352 <WordDetect attribute="Error" context="#pop#pop!expressionError" insensitive="1"
0353 String="end" endRegion="ArchitectureRegion1"/>
0354 </context>
0355
0356 <context name="arch_of" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!block_declarative_stmt">
0357 <IncludeRules context="blank"/>
0358 <WordDetect attribute="Keyword" context="#pop!arch_ref" insensitive="1" String="of"/>
0359 </context>
0360
0361 <context name="arch_ref" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!block_declarative_stmt">
0362 <IncludeRules context="blank"/>
0363 <WordDetect attribute="Keyword" context="#pop!block_declarative_stmt" insensitive="1" String="is" />
0364 <IncludeRules context="reference"/>
0365 </context>
0366
0367 <context name="reference" attribute="Normal Text" lineEndContext="#stay">
0368 <DetectIdentifier attribute="Reference"/>
0369 <RangeDetect attribute="Reference" char=""" char1="""/>
0370 <RangeDetect attribute="Reference" char="\" char1="\"/>
0371 <DetectChar attribute="Reference" char="."/>
0372 </context>
0373
0374 <!-- { block_declarative_item } -->
0375 <context name="block_declarative_stmt" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
0376 <IncludeRules context="blank"/>
0377 <IncludeRules context="block_declarative_start_expr"/>
0378 <WordDetect attribute="Control" context="#pop!concurrent_stmt" insensitive="1" String="begin"/>
0379 <IncludeRules context="start_simple_expr"/>
0380 </context>
0381
0382 <context name="block_declarative_start_expr" attribute="Normal Text" lineEndContext="#stay">
0383 <IncludeRules context="package_declarative_start_expr"/>
0384 <WordDetect attribute="Control" context="for_block_decl" insensitive="1" String="for" beginRegion="LoopRegion1"/>
0385 </context>
0386
0387 <context name="package_declarative_start_expr" attribute="Normal Text" lineEndContext="#stay">
0388 <WordDetect attribute="Control" context="component" insensitive="1" String="component"/>
0389 <IncludeRules context="process_declarative_start_expr"/>
0390 </context>
0391
0392 <context name="process_declarative_start_expr" attribute="Normal Text" lineEndContext="#stay">
0393 <WordDetect attribute="Control" context="package" insensitive="1" String="package"/>
0394 <WordDetect attribute="Signal" context="type" insensitive="1" String="type"/>
0395 <WordDetect attribute="Redirection" context="function" insensitive="1" String="function"/>
0396 <WordDetect attribute="Keyword" context="procedure" insensitive="1" String="procedure" beginRegion="ProcedureRegion1"/>
0397 <!-- *shared* *variable* ... -->
0398 <WordDetect attribute="Keyword" insensitive="1" String="shared"/>
0399 <!-- *impure* *function* ... -->
0400 <WordDetect attribute="Keyword" insensitive="1" String="impure"/>
0401 <!-- *pure* *function* ... -->
0402 <WordDetect attribute="Keyword" insensitive="1" String="pure"/>
0403 <WordDetect attribute="Keyword" context="view" insensitive="1" String="view" beginRegion="sig"/>
0404 <keyword attribute="Signal" context="signal" String="signals"/>
0405 </context>
0406
0407 <context name="start_simple_expr" attribute="Normal Text" lineEndContext="#stay">
0408 <IncludeRules context="pop_end"/>
0409 <keyword attribute="Keyword" context="sequential_stmt_expr" String="keywords"/>
0410 <DetectIdentifier attribute="Normal Text" context="sequential_stmt_expr"/>
0411 </context>
0412
0413 <context name="start_simple_expr_then_pop" attribute="Normal Text" lineEndContext="#stay">
0414 <IncludeRules context="pop_end"/>
0415 <keyword attribute="Keyword" context="#pop!sequential_stmt_expr" String="keywords"/>
0416 <DetectIdentifier attribute="Normal Text" context="#pop!sequential_stmt_expr"/>
0417 </context>
0418
0419 <!-- { concurrent_statement } -->
0420 <context name="concurrent_stmt" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="concurrent_stmt_item">
0421 <IncludeRules context="blank"/>
0422 <IncludeRules context="pop_end"/>
0423 <IncludeRules context="concurrent_label"/>
0424 </context>
0425
0426 <context name="concurrent_label" attribute="Normal Text" lineEndContext="#stay">
0427 <RegExpr attribute="Name" context="concurrent_stmt_label" String="\b(?!(process|constant|signal|variable)\b)&label;"/>
0428 </context>
0429
0430 <context name="concurrent_stmt_label" attribute="Normal Text" lineEndContext="#stay">
0431 <DetectChar attribute="Operator" context="#pop!concurrent_stmt_labelized_item" char=":"/>
0432 <DetectSpaces attribute="Normal Text"/>
0433 </context>
0434
0435 <context name="concurrent_stmt_labelized_item" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!sequential_stmt_expr">
0436 <IncludeRules context="blank"/>
0437 <WordDetect attribute="Control" context="#pop!case_generate" insensitive="1" String="case" beginRegion="CaseRegion1"/>
0438 <WordDetect attribute="Control" context="#pop!for_generate" insensitive="1" String="for" beginRegion="LoopRegion1"/>
0439 <WordDetect attribute="Control" context="#pop!if_generate" insensitive="1" String="if" beginRegion="IfRegion1"/>
0440 <keyword attribute="Keyword" context="#pop!instantiated_unit" String="instantiated"/>
0441 <IncludeRules context="concurrent_stmt_item_start"/>
0442 <IncludeRules context="instantiated_unit_name"/>
0443 <DetectIdentifier attribute="Normal Text" context="#pop!sequential_stmt_expr"/>
0444 </context>
0445
0446 <context name="concurrent_stmt_item" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!sequential_stmt_expr">
0447 <IncludeRules context="blank"/>
0448 <IncludeRules context="concurrent_stmt_item_start"/>
0449 <DetectIdentifier attribute="Normal Text" context="#pop!sequential_stmt_expr"/>
0450 </context>
0451
0452 <context name="concurrent_stmt_item_start" attribute="Normal Text" lineEndContext="#stay">
0453 <WordDetect attribute="Keyword" context="#stay" insensitive="1" String="postponed"/>
0454 <WordDetect attribute="Control" context="#pop!package" insensitive="1" String="package"/>
0455 <WordDetect attribute="Signal" context="#pop!type" insensitive="1" String="type"/>
0456 <WordDetect attribute="Redirection" context="#pop!function" insensitive="1" String="function"/>
0457 <WordDetect attribute="Keyword" context="#pop!procedure" insensitive="1" String="procedure" beginRegion="ProcedureRegion1"/>
0458 <WordDetect attribute="Process" context="#pop!process" insensitive="1" String="process" beginRegion="ProcessRegion1"/>
0459 <WordDetect attribute="Control" context="#pop!block" insensitive="1" String="block" beginRegion="BlockRegion1"/>
0460 <WordDetect attribute="Keyword" context="#pop!view" insensitive="1" String="view"/>
0461 <keyword attribute="Signal" context="#pop!signal" String="signals" beginRegion="sig"/>
0462 <IncludeRules context="sequential_stmt_item_start"/>
0463 <keyword attribute="Keyword" context="#pop!sequential_stmt_expr" String="keywords"/>
0464 </context>
0465
0466 <!--
0467 block_declarative_item_for ::=
0468 *for* instantiation_list : name
0469 [ *use* entity_aspect ]
0470 [ generic_map_aspect ]
0471 [ port_map_aspect ] ;
0472 [ block_declarative_item_for_end ]
0473
0474 block_declarative_item_for ::=
0475 [ *use* *vunit* name_list ;
0476 { *use* *vunit* name_list ; } ]
0477 *end* *for* ;
0478 | *end* *for* ;
0479 -->
0480 <context name="for_block_decl" attribute="Normal Text" lineEndContext="#stay">
0481 <IncludeRules context="preExpression"/>
0482 <DetectChar attribute="Normal Text" context="#pop!for_block_unit" char=";" endRegion="InstanceRegion1"/>
0483 <WordDetect context="#pop!expressionError" insensitive="1" String="end"/>
0484 <IncludeRules context="find_instantiated_map"/>
0485 <IncludeRules context="postExpression"/>
0486 </context>
0487
0488 <context name="for_block_unit" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!for_block_end_region">
0489 <IncludeRules context="blank"/>
0490 <WordDetect context="sequential_stmt_expr" insensitive="1" String="use"/>
0491 <WordDetect context="for_block_end" insensitive="1" String="end"/>
0492 </context>
0493
0494 <context name="for_block_end" attribute="Normal Text" lineEndContext="#stay">
0495 <RegExpr attribute="Control" context="#pop#pop" insensitive="1"
0496 String="&bos;end\s+for\s*;" endRegion="LoopRegion1"/>
0497 <WordDetect attribute="Error" context="#pop#pop!expressionError" insensitive="1"
0498 String="end" endRegion="LoopRegion1"/>
0499 </context>
0500
0501 <context name="for_block_end_region" attribute="Normal Text" lineEndContext="#stay">
0502 <RegExpr context="#pop" String="." lookAhead="1" endRegion="LoopRegion1"/>
0503 </context>
0504
0505 <!--
0506 instantiated ::=
0507 instantiated_unit
0508 instantiated_unit_decl
0509
0510 instantiated_unit ::=
0511 [ *component* ] name
0512 | *entity* name [ ( identifier ) ]
0513 | *configuration* name
0514
0515 instantiated_unit_decl ::=
0516 [ generic_map_aspect ] [ port_map_aspect ] ;
0517
0518 port_map_aspect ::=
0519 *port* *map* ( association_list )
0520
0521 generic_map_aspect ::=
0522 *generic* *map* ( association_list )
0523 -->
0524 <context name="instantiated_unit" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!instantiated_unit_decl">
0525 <IncludeRules context="blank"/>
0526 <IncludeRules context="instantiated_unit_name"/>
0527 </context>
0528
0529 <context name="instantiated_unit_name" attribute="Normal Text" lineEndContext="#stay">
0530 <RegExpr attribute="Reference" context="#pop!instantiated_unit_decl" String="&varname;(\s*\.\s*&varname;)?" beginRegion="InstanceRegion1"/>
0531 </context>
0532
0533 <context name="instantiated_unit_decl" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!end_instance_region">
0534 <IncludeRules context="blank"/>
0535 <DetectChar attribute="Normal Text" context="#pop" char=";" endRegion="InstanceRegion1"/>
0536 <!-- *entity* name ( identifier ) -->
0537 <!-- ^_____________ -->
0538 <DetectChar attribute="Normal Text" context="instantiated_unit_identifier" char="("/>
0539 <IncludeRules context="find_instantiated_map"/>
0540 </context>
0541
0542 <context name="find_instantiated_map" attribute="Normal Text" lineEndContext="#stay">
0543 <RegExpr attribute="Keyword" context="instance_map_start" insensitive="true" String="&bos;(port|generic)\s+map\b\s*"/>
0544 </context>
0545
0546 <context name="instantiated_unit_identifier" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop#pop!end_instance_region">
0547 <IncludeRules context="blank"/>
0548 <DetectChar attribute="Error" context="#pop" char=")"/>
0549 <RegExpr attribute="Normal Text" context="#pop!instantiated_unit_identifier_end" String="&identifier;"/>
0550 </context>
0551 <context name="instantiated_unit_identifier_end" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop#pop!end_instance_region">
0552 <IncludeRules context="blank"/>
0553 <DetectChar attribute="Normal Text" context="#pop" char=")"/>
0554 </context>
0555
0556 <context name="end_instance_region" attribute="Normal Text" lineEndContext="#stay">
0557 <WordDetect context="#pop" insensitive="1" String="end" lookAhead="1" endRegion="InstanceRegion1"/>
0558 <DetectIdentifier context="#pop" lookAhead="1" endRegion="InstanceRegion1"/>
0559 <RegExpr context="#pop" String="." lookAhead="1" endRegion="InstanceRegion1"/>
0560 </context>
0561
0562 <context name="instance_map_start" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
0563 <IncludeRules context="blank"/>
0564 <DetectChar attribute="Normal Text" context="#pop!instance_map" char="(" beginRegion="InstanceMapRegion"/>
0565 </context>
0566
0567 <!-- Inside a port or generic map -->
0568 <context name="instance_map" attribute="Normal Text" lineEndContext="#stay">
0569 <AnyChar attribute="Error" context="#stay" String="<;:"/>
0570 <IncludeRules context="preExpression"/>
0571 <DetectChar attribute="Normal Text" context="#pop" char=")" endRegion="InstanceMapRegion"/>
0572 <IncludeRules context="enclosed_association_list"/>
0573 <IncludeRules context="postExpression"/>
0574 </context>
0575
0576 <!--
0577 if ::=
0578 *if* expression *then*
0579 { sequential_statement }
0580 { *elsif* expression *then*
0581 { sequential_statement } }
0582 [ *else*
0583 { sequential_statement } ]
0584 *end* *if* [ label ] ;
0585 -->
0586 <context name="if_start" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="if_expr">
0587 <RegExpr attribute="Control" context="#pop" insensitive="true" endRegion="IfRegion1"
0588 String="&bos;end\s+if(\s+&varname;)?\s*;"/>
0589 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
0590 String="end" endRegion="IfRegion1"/>
0591 </context>
0592
0593 <context name="if_expr" attribute="Normal Text" lineEndContext="#stay">
0594 <IncludeRules context="preExpression"/>
0595 <IncludeRules context="pop_end"/>
0596 <WordDetect attribute="Control" context="if_body" insensitive="true" String="then"/>
0597 <IncludeRules context="postExpression"/>
0598 </context>
0599
0600 <context name="if_body" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_item">
0601 <IncludeRules context="blank"/>
0602 <WordDetect attribute="Control" context="#pop" insensitive="true" String="elsif"/>
0603 <WordDetect attribute="Control" context="#pop#pop!sequential_stmt" insensitive="true" String="else"/>
0604 <WordDetect attribute="Control" context="#pop#pop" insensitive="true" String="end" lookAhead="1"/>
0605 <IncludeRules context="sequential_label"/>
0606 </context>
0607
0608 <!--
0609 case ::=
0610 *case* [ ? ] expression *is*
0611 *when* choices => { sequential_statement }
0612 { *when* choices => { sequential_statement } }
0613 *end* *case* [ ? ] [ label ] ;
0614 -->
0615 <context name="case" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="case_expr">
0616 <RegExpr attribute="Control" context="#pop" insensitive="true" endRegion="CaseRegion1"
0617 String="&bos;end\s+case(\s*[?])?(?:\s*\b&varname;)?\s*;"/>
0618 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
0619 String="end" endRegion="CaseRegion1"/>
0620 </context>
0621
0622 <context name="case_expr" attribute="Normal Text" lineEndContext="#stay">
0623 <IncludeRules context="preExpression"/>
0624 <IncludeRules context="pop_end"/>
0625 <WordDetect attribute="Keyword" context="#pop!case_is" insensitive="true" String="is"/>
0626 <DetectChar char=";" attribute="Normal Text" context="#pop!case_body" beginRegion="CaseWhenRegion1"/>
0627 <IncludeRules context="postExpression"/>
0628 </context>
0629
0630 <context name="case_is" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!case_when">
0631 <IncludeRules context="blank"/>
0632 <WordDetect attribute="Control" context="#pop!case_when" insensitive="true" String="when"/>
0633 </context>
0634
0635 <context name="case_when" attribute="Normal Text" lineEndContext="#stay">
0636 <Detect2Chars char="=" char1=">" attribute="Operator" context="#pop!case_body" beginRegion="CaseWhenRegion1"/>
0637 <IncludeRules context="preExpression"/>
0638 <DetectChar char=";" attribute="Normal Text" context="#pop!case_body" beginRegion="CaseWhenRegion1"/>
0639 <IncludeRules context="case_when_post_expr"/>
0640 </context>
0641
0642 <context name="case_when_post_expr" attribute="Normal Text" lineEndContext="#stay">
0643 <WordDetect attribute="Keyword" insensitive="1" String="others"/>
0644 <IncludeRules context="pop_end"/>
0645 <IncludeRules context="keywordExpression"/>
0646 <DetectIdentifier attribute="Name"/>
0647 </context>
0648
0649 <context name="case_body" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_item">
0650 <IncludeRules context="blank"/>
0651 <WordDetect attribute="Control" context="#pop!case_when" insensitive="1" String="when" endRegion="CaseWhenRegion1"/>
0652 <WordDetect context="#pop" insensitive="1" String="end" lookAhead="1" endRegion="CaseWhenRegion1"/>
0653 <IncludeRules context="sequential_label"/>
0654 </context>
0655 <!-- 'when' and 'end case' are checked at the beginning of the line for better code folding -->
0656
0657 <!--
0658 while ::=
0659 *while* expression *loop*
0660 { sequential_statement }
0661 *end* *loop* [ label ] ;
0662
0663 for ::=
0664 *for* identifier *in* discrete_range *loop*
0665 { sequential_statement }
0666 *end* *loop* [ label ] ;
0667 -->
0668 <context name="while" attribute="Normal Text" lineEndContext="#stay">
0669 <IncludeRules context="preExpression"/>
0670 <WordDetect attribute="Control" context="#pop!loop" insensitive="true" String="loop" beginRegion="LoopRegion1"/>
0671 <IncludeRules context="pop_end"/>
0672 <IncludeRules context="postExpression"/>
0673 </context>
0674
0675 <!--
0676 loop ::=
0677 *loop*
0678 { sequential_statement }
0679 *end* *loop* [ label ] ;
0680 -->
0681 <context name="loop" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt">
0682 <RegExpr attribute="Control" context="#pop" insensitive="true" endRegion="LoopRegion1"
0683 String="&bos;end\s+loop(\s+&varname;)?\s*;"/>
0684 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
0685 String="end" endRegion="LoopRegion1"/>
0686 </context>
0687
0688 <!--====declare ===============-->
0689 <context name="declare" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="block_body">
0690 <RegExpr attribute="Keyword" context="#pop" insensitive="true" endRegion="DeclareRegion1"
0691 String="&bos;end(\s+declare)?\s*;"/>
0692 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
0693 String="end" endRegion="DeclareRegion1"/>
0694 </context>
0695
0696 <!--
0697 entity ::=
0698 *entity* identifier *is*
0699 [ entity_header ]
0700 { entity_declarative_item }
0701 [ *begin*
0702 { entity_statement } ]
0703 *end* [ *entity* ] [ identifier ] ;
0704
0705 entity_header ::=
0706 [ *generic* ( interface_list ) ; ]
0707 [ *port* ( interface_list ) ; ]
0708 -->
0709 <context name="entity" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
0710 <IncludeRules context="blank"/>
0711 <RegExpr attribute="Name" context="entity_main" beginRegion="EntityRegion1"
0712 String="(&identifier;)"/>
0713 </context>
0714
0715 <context name="entity_main" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="entity_header">
0716 <RegExpr attribute="Control" context="#pop#pop" dynamic="1" insensitive="1"
0717 String="&bos;end(\s+entity)?(\s+%1)?\s*;" endRegion="EntityRegion1"/>
0718 <WordDetect attribute="Error" context="#pop#pop!expressionError" insensitive="true"
0719 String="end" endRegion="EntityRegion1"/>
0720 </context>
0721
0722 <context name="entity_header" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!entity_decl">
0723 <IncludeRules context="blank"/>
0724 <IncludeRules context="enclosed_interface_list"/>
0725 <DetectChar attribute="Normal Text" char=";"/>
0726 <WordDetect attribute="Control" insensitive="true" String="generic"/>
0727 <WordDetect attribute="Control" insensitive="true" String="port"/>
0728 <WordDetect attribute="Keyword" insensitive="true" String="is"/>
0729 </context>
0730
0731 <context name="entity_decl" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
0732 <IncludeRules context="blank"/>
0733 <IncludeRules context="process_declarative_start_expr"/>
0734 <WordDetect attribute="Keyword" context="#pop!entity_stmt" insensitive="1" String="begin"/>
0735 <IncludeRules context="start_simple_expr"/>
0736 </context>
0737
0738 <context name="entity_stmt" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="entity_stmt_item">
0739 <IncludeRules context="blank"/>
0740 <IncludeRules context="pop_end"/>
0741 <RegExpr attribute="Name" context="entity_stmt_label" String="&label;"/>
0742 </context>
0743
0744 <context name="entity_stmt_label" attribute="Normal Text" lineEndContext="#stay">
0745 <DetectChar attribute="Operator" context="#pop!entity_stmt_item" char=":"/>
0746 <DetectSpaces attribute="Normal Text"/>
0747 </context>
0748
0749 <context name="entity_stmt_item" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!sequential_stmt_expr">
0750 <IncludeRules context="blank"/>
0751 <WordDetect attribute="Keyword" context="#stay" insensitive="1" String="postponed"/>
0752 <WordDetect attribute="Process" context="#pop!process" insensitive="1" String="process" beginRegion="ProcessRegion1"/>
0753 <IncludeRules context="start_simple_expr_then_pop"/>
0754 </context>
0755
0756 <!--
0757 configuration ::=
0758 *configuration* identifier *of* name *is*
0759 { configuration_declarative_item }
0760 { verification_unit_binding_indication ; }
0761 *for* block_specification
0762 { use_clause }
0763 { configuration_item }
0764 *end* *for* ;
0765 *end* [ *configuration* ] [ identifier ] ;
0766 -->
0767 <context name="configuration" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
0768 <IncludeRules context="blank"/>
0769 <RegExpr attribute="Name" context="conf_of" beginRegion="ConfigurationRegion1"
0770 String="(&identifier;)"/>
0771 </context>
0772
0773 <context name="conf_of" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="conf_is">
0774 <IncludeRules context="blank"/>
0775 <WordDetect attribute="Keyword" context="conf_ref" insensitive="1" String="of"/>
0776 <RegExpr attribute="Control" context="#pop#pop" insensitive="1" dynamic="1"
0777 String="&bos;end(\s+configuration\b)?(\s+%1)?\s*;" endRegion="ConfigurationRegion1"/>
0778 <WordDetect attribute="Error" context="#pop#pop!expressionError" insensitive="1"
0779 String="end" endRegion="ConfigurationRegion1"/>
0780 </context>
0781
0782 <context name="conf_ref" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!conf_decl">
0783 <IncludeRules context="blank"/>
0784 <WordDetect attribute="Keyword" context="#pop!conf_decl" insensitive="1" String="is" />
0785 <IncludeRules context="reference"/>
0786 </context>
0787
0788 <context name="conf_is" attribute="Control" lineEndContext="#stay" fallthroughContext="#pop#pop#pop">
0789 <IncludeRules context="blank"/>
0790 <WordDetect attribute="Keyword" context="#pop!conf_decl" insensitive="1" String="is" />
0791 </context>
0792
0793 <context name="conf_decl" attribute="Normal Text" lineEndContext="#stay">
0794 <IncludeRules context="preExpression"/>
0795 <WordDetect attribute="Control" context="conf_for" insensitive="1" String="for" beginRegion="LoopRegion1"/>
0796 <IncludeRules context="pop_end"/>
0797 <IncludeRules context="postExpression"/>
0798 </context>
0799
0800 <context name="conf_for" attribute="Normal Text" lineEndContext="#stay">
0801 <IncludeRules context="preExpression"/>
0802 <WordDetect attribute="Control" context="conf_for" insensitive="1" String="for" beginRegion="LoopRegion1"/>
0803 <WordDetect attribute="Control" context="conf_for_end" insensitive="1" lookAhead="1" String="end" endRegion="LoopRegion1"/>
0804 <IncludeRules context="postExpression"/>
0805 </context>
0806
0807 <context name="conf_for_end" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop#pop!expressionError">
0808 <RegExpr attribute="Control" context="#pop#pop" insensitive="true" String="&bos;end(\s+for\b)?\s*;"/>
0809 </context>
0810
0811 <!--
0812 context ::=
0813 *context* identifier *is*
0814 { context_item }
0815 *end* [ *context* ] [ identifier ] ;
0816
0817 | *context* selected_name { , selected_name } ;
0818
0819 context_item ::=
0820 *library* identifier { , identifier } ;
0821 | *use* selected_name { , selected_name } ;
0822 | *context* selected_name { , selected_name } ;
0823
0824 selected_name ::= prefix . suffix
0825 -->
0826 <context name="context" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!sequential_stmt_expr">
0827 <IncludeRules context="blank"/>
0828 <RegExpr attribute="Name" context="#pop!context_main" beginRegion="ContextRegion1"
0829 String="(&identifier;)(?!\.)"/>
0830 </context>
0831
0832 <context name="context_main" attribute="Control" lineEndContext="#stay" fallthroughContext="context_decl">
0833 <RegExpr attribute="Keyword" context="#pop" dynamic="1" insensitive="1"
0834 String="&bos;end(\s+context)?(\s+%1)?\s*;" endRegion="ContextRegion1"/>
0835 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="1"
0836 String="end" endRegion="ContextRegion1"/>
0837 </context>
0838
0839 <context name="context_decl" attribute="Normal Text" lineEndContext="#stay">
0840 <IncludeRules context="preExpression"/>
0841 <keyword attribute="Keyword" context="sequential_stmt_expr" String="keywordsToplevel"/>
0842 <IncludeRules context="pop_end"/>
0843 <IncludeRules context="postExpression"/>
0844 </context>
0845
0846
0847 <!--====Basic Stuff ===============-->
0848 <!-- comment and spaces -->
0849 <context name="blank" attribute="Normal Text" lineEndContext="#stay">
0850 <DetectSpaces attribute="Normal Text" context="#stay"/>
0851 <Detect2Chars attribute="Comment" context="comment" char="-" char1="-"/>
0852 <Detect2Chars attribute="Comment" context="block_comment" char="/" char1="*"/>
0853 </context>
0854
0855 <!--
0856 abstract_literal ::=
0857 integer [ . integer ] [ exponent ]
0858 | base # based_integer [ . based_integer ] # [ exponent ]
0859
0860 base ::= integer
0861 integer ::= digit { [ _ ] digit }
0862 exponent ::= E [ + ] integer | E – integer
0863 based_integer ::= extended_digit { [ _ ] extended_digit }
0864 extended_digit ::= digit | letter
0865 -->
0866 <context name="abstract_literal" attribute="Integer" lineEndContext="#pop" fallthroughContext="exponent">
0867 <DetectChar attribute="Operator" char="."/>
0868 <DetectChar attribute="Operator" context="based_integer" char="#"/>
0869 <RegExpr attribute="Integer" context="exponent" String="_?[0-9]++(_[0-9]+)*"/>
0870 </context>
0871 <context name="exponent" attribute="Integer" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
0872 <RegExpr attribute="Exponent" context="#pop#pop" String="[eE][+-]?[0-9]++(_[0-9]+)*+"/>
0873 <AnyChar attribute="Error" context="#pop#pop" String="eE_"/>
0874 </context>
0875 <context name="based_integer" attribute="Integer" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
0876 <DetectChar attribute="Operator" char="."/>
0877 <DetectChar attribute="Error" char="_"/>
0878 <DetectChar attribute="Operator" context="#pop!exponent" char="#"/>
0879 <RegExpr attribute="Based Integer" String="[0-9a-fA-F]++(_[0-9a-fA-F]+)*"/>
0880 </context>
0881
0882 <!--
0883 external_name ::=
0884 << *constant* external_pathname : subtype_indication >>
0885 | << *signal* external_pathname : subtype_indication >>
0886 | << *variable* external_pathname : subtype_indication >>
0887 -->
0888 <context name="external_name" attribute="Integer" lineEndContext="#stay" fallthroughContext="#pop">
0889 <IncludeRules context="blank"/>
0890 <!-- back to expression context -->
0891 <keyword attribute="Signal" context="#pop" String="signals"/>
0892 </context>
0893
0894 <!--
0895 interface_list ::=
0896 interface_element { ; interface_element }
0897
0898 interface_element ::=
0899 [ *constant* ] identifier_list : [ *in* ] subtype_indication [ := expression ]
0900 | [ *signal* ] identifier_list : [ *in* | *out* ] subtype_indication [ *bus* ] [ := expression ]
0901 | [ *variable* ] identifier_list : [ *in* | *out* ] subtype_indication [ := expression ]
0902 | *file* identifier_list : subtype_indication
0903 | *type* identifier
0904 | interface_subprogram_specification [ *is* name ]
0905 | interface_subprogram_specification [ *is* <> ]
0906 | *package* identifier *is* *new* name *generic* *map* ( association_list )
0907 | *package* identifier *is* *new* name *generic* *map* ( <> )
0908 | *package* identifier *is* *new* name *generic* *map* ( *default* )
0909
0910 interface_subprogram_specification ::=
0911 *procedure* designator [ [ *parameter* ] ( interface_list ) ]
0912 | [ *pure* | *impure* ] *function* designator
0913 [ [ *parameter* ] ( interface_list ) ] *return* name
0914
0915 designator ::= identifier | string_literal
0916 -->
0917 <context name="enclosed_interface_list" attribute="Normal Text" lineEndContext="#stay">
0918 <DetectChar attribute="Normal Text" context="interface_list" char="("/>
0919 </context>
0920
0921 <context name="interface_list" attribute="Normal Text" lineEndContext="#stay">
0922 <IncludeRules context="preExpression"/>
0923 <IncludeRules context="pop_end"/>
0924 <keyword attribute="Signal" String="signals"/>
0925 <IncludeRules context="postExpression"/>
0926 <DetectChar attribute="Normal Text" context="#pop" char=")"/>
0927 <IncludeRules context="enclosed_association_list"/>
0928 </context>
0929
0930 <!--
0931 association_list ::=
0932 association_element { , association_element }
0933
0934 association_element ::=
0935 [ name [ ( name ) ] => ] actual_part
0936
0937 actual_part ::=
0938 actual_designator
0939 | name ( actual_designator )
0940
0941 actual_designator ::=
0942 [ *inertial* ] expression
0943 | name
0944 | subtype_indication
0945 | *open*
0946 -->
0947 <context name="enclosed_association_list" attribute="Normal Text" lineEndContext="#stay">
0948 <DetectChar attribute="Normal Text" context="association_list" char="("/>
0949 </context>
0950
0951 <context name="association_list" attribute="Normal Text" lineEndContext="#stay">
0952 <IncludeRules context="preExpression"/>
0953 <IncludeRules context="pop_end"/>
0954 <IncludeRules context="postExpression"/>
0955 <DetectChar attribute="Normal Text" context="#pop" char=")"/>
0956 <IncludeRules context="enclosed_association_list"/>
0957 <DetectChar context="#pop" char=";" lookAhead="1"/>
0958 </context>
0959
0960
0961 <!-- sequential statement -->
0962 <context name="sequential_stmt" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_item">
0963 <IncludeRules context="blank"/>
0964 <IncludeRules context="pop_end"/>
0965 <IncludeRules context="sequential_label"/>
0966 </context>
0967
0968 <context name="sequential_label" attribute="Normal Text" lineEndContext="#stay">
0969 <RegExpr attribute="Name" context="sequential_stmt_label" String="&label;"/>
0970 </context>
0971
0972 <context name="sequential_stmt_label" attribute="Normal Text" lineEndContext="#stay">
0973 <DetectChar attribute="Operator" context="#pop!sequential_stmt_item" char=":"/>
0974 <DetectSpaces attribute="Normal Text"/>
0975 </context>
0976
0977 <context name="sequential_stmt_item" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!sequential_stmt_expr">
0978 <IncludeRules context="blank"/>
0979 <DetectChar attribute="Normal Text" context="#pop" char=";"/>
0980 <IncludeRules context="sequential_stmt_item_start"/>
0981 <IncludeRules context="start_simple_expr_then_pop"/>
0982 </context>
0983
0984 <context name="sequential_stmt_item_start" attribute="Normal Text" lineEndContext="#stay">
0985 <WordDetect attribute="Control" context="#pop!if_start" insensitive="1" String="if" beginRegion="IfRegion1"/>
0986 <WordDetect attribute="Control" context="#pop!case" insensitive="1" String="case" beginRegion="CaseRegion1"/>
0987 <WordDetect attribute="Control" context="#pop!while" insensitive="1" String="for"/>
0988 <WordDetect attribute="Control" context="#pop!while" insensitive="1" String="while"/>
0989 <WordDetect attribute="Control" context="#pop!loop" insensitive="1" String="loop" beginRegion="LoopRegion1"/>
0990 <WordDetect attribute="Keyword" context="#pop!declare" insensitive="1" String="declare" beginRegion="DeclareRegion1"/>
0991 <keyword attribute="Control" context="#pop!sequential_stmt_expr" String="controls"/>
0992 </context>
0993
0994 <context name="sequential_stmt_expr" attribute="Normal Text" lineEndContext="#stay">
0995 <IncludeRules context="preExpression"/>
0996 <DetectChar attribute="Normal Text" context="#pop" char=";"/>
0997 <IncludeRules context="pop_end"/>
0998 <IncludeRules context="postExpression"/>
0999 </context>
1000
1001 <!--
1002 if_generate ::=
1003 *if* [ alternative_label : ] expression *generate*
1004 generate_statement_body
1005 { *elsif* [ alternative_label : ] expression *generate*
1006 generate_statement_body }
1007 [ *else* [ alternative_label : ] *generate*
1008 generate_statement_body ]
1009 *end* *generate* [ label ] ;
1010
1011 generate_statement_body ::=
1012 generate_body
1013 [ *end* [ alternative_label ] ; ]
1014 -->
1015 <context name="if_generate" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="if_generate_label">
1016 <RegExpr attribute="Control" context="#pop" insensitive="1" endRegion="IfRegion1"
1017 String="&bos;end\s+generate(\s+&varname;)?\s*;"/>
1018 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="1"
1019 String="end" endRegion="IfRegion1"/>
1020 </context>
1021
1022 <context name="if_generate_label" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!if_generate_expr">
1023 <IncludeRules context="blank"/>
1024 <RegExpr attribute="Name" context="if_generate_after_label" String="&label;"/>
1025 </context>
1026
1027 <context name="if_generate_after_label" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop#pop!if_generate_expr">
1028 <DetectChar attribute="Operator" context="#pop#pop!if_generate_expr" char=":"/>
1029 <DetectSpaces attribute="Normal Text"/>
1030 </context>
1031
1032 <context name="if_generate_expr" attribute="Normal Text" lineEndContext="#stay">
1033 <IncludeRules context="preExpression"/>
1034 <IncludeRules context="pop_end"/>
1035 <WordDetect attribute="Control" context="#pop!if_generate_body" insensitive="1" String="generate"/>
1036 <IncludeRules context="postExpression"/>
1037 </context>
1038
1039 <context name="if_generate_body" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
1040 <IncludeRules context="blank"/>
1041 <IncludeRules context="generate_body_pre_start"/>
1042 <WordDetect attribute="Control" context="#pop!if_generate_label" insensitive="1" String="elsif"/>
1043 <WordDetect attribute="Control" context="#pop!if_generate_label" insensitive="1" String="else"/>
1044 <WordDetect context="if_generate_body_end" insensitive="1" String="end" lookAhead="1"/>
1045 <IncludeRules context="generate_body_post_start"/>
1046 </context>
1047
1048 <context name="if_generate_body_end" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!expressionError">
1049 <RegExpr context="#pop#pop" insensitive="1" String="end\s+generate\b" lookAhead="1"/>
1050 <RegExpr attribute="Control" context="#pop" insensitive="1" String="end(\s+&varname;)?\s*;"/>
1051 </context>
1052
1053 <!--
1054 generate_body ::=
1055 [ { block_declarative_item }
1056 *begin* ]
1057 { concurrent_statement }
1058 -->
1059 <context name="generate_body" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
1060 <IncludeRules context="blank"/>
1061 <IncludeRules context="generate_body_pre_start"/>
1062 <IncludeRules context="pop_end"/>
1063 <IncludeRules context="generate_body_post_start"/>
1064 </context>
1065
1066 <context name="generate_body_pre_start" attribute="Normal Text" lineEndContext="#stay">
1067 <IncludeRules context="block_declarative_start_expr"/>
1068
1069 <!-- concurrent_stmt_item -->
1070 <WordDetect attribute="Keyword" context="#stay" insensitive="1" String="postponed"/>
1071 <WordDetect attribute="Process" context="process" insensitive="1" String="process" beginRegion="ProcessRegion1"/>
1072 <WordDetect attribute="Control" context="block" insensitive="1" String="block" beginRegion="BlockRegion1"/>
1073
1074 <!-- sequential_stmt_item -->
1075 <WordDetect attribute="Control" context="if_start" insensitive="1" String="if" beginRegion="IfRegion1"/>
1076 <WordDetect attribute="Control" context="case" insensitive="1" String="case" beginRegion="CaseRegion1"/>
1077 <WordDetect attribute="Control" context="while" insensitive="1" String="while"/>
1078 <WordDetect attribute="Control" context="loop" insensitive="1" String="loop" beginRegion="LoopRegion1"/>
1079 <WordDetect attribute="Keyword" context="declare" insensitive="1" String="declare" beginRegion="DeclareRegion1"/>
1080 <keyword attribute="Control" context="sequential_stmt_expr" String="controls"/>
1081
1082 <WordDetect attribute="Control" insensitive="1" String="begin"/>
1083 </context>
1084
1085 <context name="generate_body_post_start" attribute="Normal Text" lineEndContext="#stay">
1086 <keyword attribute="Keyword" context="sequential_stmt_expr" String="keywords"/>
1087 <IncludeRules context="concurrent_label"/>
1088 <DetectIdentifier attribute="Normal Text" context="sequential_stmt_expr"/>
1089 </context>
1090
1091 <!--
1092 case_generate ::=
1093 *case* expression *generate*
1094 *when* [ label : ] choices => generate_statement_body
1095 { *when* [ label : ] choices => generate_statement_body }
1096 *end* *generate* [ label ] ;
1097
1098 generate_statement_body ::=
1099 generate_body
1100 [ *end* [ alternative_label ] ; ]
1101 -->
1102 <context name="case_generate" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="case_generate_expr">
1103 <RegExpr attribute="Control" context="#pop" insensitive="1" endRegion="CaseRegion1"
1104 String="&bos;end\s+generate(\s+&varname;)?\s*;"/>
1105 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="1"
1106 String="end" endRegion="CaseRegion1"/>
1107 </context>
1108
1109 <context name="case_generate_expr" attribute="Normal Text" lineEndContext="#stay">
1110 <IncludeRules context="preExpression"/>
1111 <IncludeRules context="pop_end"/>
1112 <WordDetect attribute="Control" context="#pop!case_generate_is" insensitive="1" String="generate"/>
1113 <!-- fallback to case ... is -->
1114 <WordDetect attribute="Keyword" context="#pop!case_is" insensitive="1" String="is"/>
1115 <IncludeRules context="postExpression"/>
1116 </context>
1117
1118 <context name="case_generate_is" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!case_generate_when">
1119 <IncludeRules context="blank"/>
1120 <WordDetect attribute="Control" context="case_generate_when" insensitive="1" String="when"/>
1121 </context>
1122
1123 <context name="case_generate_when" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!case_generate_when_expr">
1124 <IncludeRules context="blank"/>
1125 <RegExpr attribute="Name" context="case_generate_when_label" String="&label;"/>
1126 </context>
1127
1128 <context name="case_generate_when_label" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop#pop!case_generate_when_expr">
1129 <DetectChar attribute="Operator" context="#pop#pop!case_generate_when_expr" char=":"/>
1130 <DetectSpaces attribute="Normal Text"/>
1131 </context>
1132
1133 <context name="case_generate_when_expr" attribute="Normal Text" lineEndContext="#stay">
1134 <Detect2Chars char="=" char1=">" attribute="Operator" context="#pop!case_generate_body" beginRegion="CaseWhenRegion1"/>
1135 <IncludeRules context="preExpression"/>
1136 <DetectChar char=";" attribute="Normal Text" context="#pop!case_generate_body" beginRegion="CaseWhenRegion1"/>
1137 <IncludeRules context="case_when_post_expr"/>
1138 </context>
1139
1140 <context name="case_generate_body" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
1141 <IncludeRules context="blank"/>
1142 <IncludeRules context="generate_body_pre_start"/>
1143 <WordDetect attribute="Control" context="#pop!case_generate_when" insensitive="1" String="when" endRegion="CaseWhenRegion1"/>
1144 <WordDetect context="#pop!if_generate_body_end" insensitive="1" String="end" lookAhead="1" endRegion="CaseWhenRegion1"/>
1145 <IncludeRules context="generate_body_post_start"/>
1146 </context>
1147
1148 <!--
1149 for_generate ::=
1150 *for* parameter_specification *generate*
1151 generate_body
1152 *end* *generate* [ label ] ;
1153 -->
1154 <context name="for_generate" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="for_generate_expr">
1155 <RegExpr attribute="Control" context="#pop" insensitive="1" endRegion="LoopRegion1"
1156 String="&bos;end\s+generate(\s+&varname;)?\s*;"/>
1157 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="1"
1158 String="end" endRegion="LoopRegion1"/>
1159 </context>
1160
1161 <context name="for_generate_expr" attribute="Normal Text" lineEndContext="#stay">
1162 <IncludeRules context="preExpression"/>
1163 <IncludeRules context="pop_end"/>
1164 <WordDetect attribute="Control" context="#pop!generate_body" insensitive="1" String="generate"/>
1165 <IncludeRules context="postExpression"/>
1166 </context>
1167
1168 <!--
1169 block ::=
1170 *block* [ ( condition ) ] [ *is* ]
1171 [ generic_clause
1172 [ generic_map_aspect ; ] ]
1173 [ port_clause
1174 [ port_map_aspect ; ] ]
1175 { block_declarative_item }
1176 *begin*
1177 { concurrent_statement }
1178 *end* *block* [ block_label ] ;
1179 -->
1180 <context name="block" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="block_cont">
1181 <RegExpr attribute="Control" context="#pop" insensitive="1"
1182 String="&bos;end\s+block(\s+&varname;)?\s*;" endRegion="BlockRegion1"/>
1183 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
1184 String="end" endRegion="BlockRegion1"/>
1185 </context>
1186
1187 <context name="block_cont" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!block_is">
1188 <IncludeRules context="blank"/>
1189 <IncludeRules context="enclosed_association_list"/>
1190 <WordDetect attribute="Keyword" context="#pop!block_is" insensitive="true" String="is"/>
1191 </context>
1192
1193 <context name="block_is" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!block_body">
1194 <IncludeRules context="blank"/>
1195 <IncludeRules context="enclosed_interface_list"/>
1196 <DetectChar attribute="Normal Text" char=";"/>
1197 <IncludeRules context="find_instantiated_map"/>
1198 <WordDetect attribute="Control" insensitive="true" String="generic"/>
1199 <WordDetect attribute="Control" insensitive="true" String="port"/>
1200 </context>
1201
1202 <!-- as block_declarative_stmt but with begin as Keyword -->
1203 <context name="block_body" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
1204 <IncludeRules context="blank"/>
1205 <IncludeRules context="block_declarative_start_expr"/>
1206 <WordDetect attribute="Keyword" context="#pop!concurrent_stmt" insensitive="1" String="begin"/>
1207 <IncludeRules context="start_simple_expr"/>
1208 </context>
1209
1210 <!--
1211 process ::=
1212 *process* [ ( *all* | name_list ) ] [ *is* ]
1213 { process_declarative_item }
1214 *begin*
1215 { sequential_statement }
1216 *end* [ *postponed* ] *process* [ label ] ;
1217 -->
1218 <context name="process" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="process_params">
1219 <RegExpr attribute="Process" context="#pop" insensitive="1"
1220 String="&bos;end(\s+postponed)?(\s+process\b)?(\s+&varname;)?\s*;" endRegion="ProcessRegion1"/>
1221 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
1222 String="end" endRegion="ProcessRegion1"/>
1223 </context>
1224
1225 <context name="process_params" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!process_decl">
1226 <IncludeRules context="blank"/>
1227 <IncludeRules context="enclosed_association_list"/>
1228 <WordDetect attribute="Keyword" context="#pop!process_decl" String="is"/>
1229 </context>
1230
1231 <context name="process_decl" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
1232 <IncludeRules context="blank"/>
1233 <IncludeRules context="process_declarative_start_expr"/>
1234 <WordDetect attribute="Process" context="#pop!sequential_stmt" insensitive="true" String="begin"/>
1235 <IncludeRules context="start_simple_expr"/>
1236 </context>
1237
1238 <!-- expression -->
1239 <context name="preExpression" attribute="Normal Text" lineEndContext="#stay">
1240 <IncludeRules context="blank"/>
1241 <Detect2Chars attribute="Operator" context="external_name" char="<" char1="<"/>
1242 <AnyChar attribute="Operator" context="#stay" String="[]&><=:+-*/|`.,?@"/>
1243 <DetectChar attribute="Vector" context="string" char="""/>
1244 <DetectChar attribute="Attribute" context="attribute" char="'"/>
1245 <Int attribute="Integer" context="abstract_literal"/>
1246 </context>
1247
1248 <context name="postExpression" attribute="Normal Text" lineEndContext="#stay">
1249 <IncludeRules context="keywordExpression"/>
1250 <DetectIdentifier attribute="Normal Text"/>
1251 </context>
1252
1253 <context name="keywordExpression" attribute="Normal Text" lineEndContext="#stay">
1254 <keyword attribute="Data Type" context="#stay" String="types"/>
1255 <keyword attribute="Data Type" context="#stay" String="timeunits"/>
1256 <keyword attribute="Range" context="#stay" String="range"/>
1257 <keyword attribute="Keyword" context="#stay" String="keywords"/>
1258 </context>
1259
1260 <!-- expression error -->
1261 <context name="expressionError" attribute="Error" lineEndContext="#pop">
1262 <Detect2Chars attribute="Comment" context="comment" char="-" char1="-"/>
1263 <DetectChar attribute="Error" context="#pop" char=";"/>
1264 </context>
1265
1266 <!-- other environments -->
1267 <context name="comment" attribute="Comment" lineEndContext="#pop">
1268 <DetectSpaces/>
1269 <IncludeRules context="##Comments"/>
1270 </context>
1271
1272 <context name="block_comment" attribute="Comment" lineEndContext="#stay">
1273 <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/"/>
1274 <IncludeRules context="comment"/>
1275 </context>
1276
1277 <context name="string" attribute="Vector" lineEndContext="#stay">
1278 <DetectChar attribute="Vector" context="#pop" char="""/>
1279 </context>
1280
1281 <context name="attribute" attribute="Attribute" lineEndContext="#pop">
1282 <!-- character_literal or end attribute -->
1283 <RegExpr attribute="Attribute" context="#pop" String="[^']?'"/>
1284 <DetectIdentifier attribute="Attribute"/>
1285 <DetectChar attribute="Attribute" context="quot in att" char="""/>
1286 <DetectChar attribute="Attribute" context="par in att" char="("/>
1287 <DetectSpaces attribute="Normal Text" context="#pop"/>
1288 <AnyChar attribute="Attribute" context="#pop" String=")=<>;" lookAhead="true" />
1289 </context>
1290
1291 <context name="quot in att" attribute="Attribute" lineEndContext="#stay">
1292 <DetectChar attribute="Attribute" context="#pop" char="""/>
1293 </context>
1294 <context name="par in att" attribute="Attribute" lineEndContext="#stay">
1295 <DetectChar attribute="Attribute" context="#pop" char=")"/>
1296 </context>
1297
1298 <context name="signal" attribute="Normal Text" lineEndContext="#stay">
1299 <IncludeRules context="preExpression"/>
1300 <DetectChar attribute="Normal Text" context="#pop" char=";"/>
1301 <IncludeRules context="pop_end"/>
1302 <IncludeRules context="postExpression"/>
1303 </context>
1304
1305 <!--
1306 type ::= *type* identifier [ *is* type_definition ] ;
1307
1308 type_definition ::=
1309 type_definition_range
1310 | type_definition_record
1311 | type_definition_protected
1312 | ......
1313 -->
1314 <context name="type" attribute="Normal Text" lineEndContext="#stay">
1315 <IncludeRules context="blank"/>
1316 <DetectChar attribute="Normal Text" context="#pop" char=";"/>
1317 <WordDetect attribute="Signal" context="type_is" insensitive="1" String="is"/>
1318 <DetectIdentifier attribute="Normal Text"/>
1319 </context>
1320
1321 <context name="type_is" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop#pop!signal">
1322 <IncludeRules context="blank"/>
1323 <WordDetect attribute="Keyword" context="#pop#pop!type_record" insensitive="1" String="record" beginRegion="sig"/>
1324 <WordDetect attribute="Keyword" context="#pop#pop!type_range" insensitive="1" String="range"/>
1325 <WordDetect attribute="Keyword" context="#pop#pop!type_protected" insensitive="1" String="protected" beginRegion="BlockRegion1"/>
1326 </context>
1327
1328 <!-- type range
1329
1330 type_definition_range ::=
1331 *range* range
1332 [ *units*
1333 identifier
1334 { identifier = physical_literal ; }
1335 *end* *units* [ identifier ] ]
1336
1337 range ::=
1338 attribute_name
1339 | simple_expression direction simple_expression
1340
1341 attribute_name ::=
1342 prefix [ signature ] ' identifier [ ( expression ) ]
1343 -->
1344 <context name="type_range" attribute="Normal Text" lineEndContext="#stay">
1345 <IncludeRules context="preExpression"/>
1346 <DetectChar attribute="Normal Text" context="#pop" char=";"/>
1347 <WordDetect attribute="Control" context="#pop!type_range_units" insensitive="1" String="units" beginRegion="UnitRegion1"/>
1348 <IncludeRules context="postExpression"/>
1349 </context>
1350
1351 <context name="type_range_units" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="type_body">
1352 <RegExpr attribute="Control" context="#pop" insensitive="1"
1353 String="&bos;end\s+units(\s+&identifier;)?\s*;" endRegion="UnitRegion1"/>
1354 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
1355 String="end" endRegion="UnitRegion1"/>
1356 </context>
1357
1358 <context name="type_body" attribute="Normal Text" lineEndContext="#stay">
1359 <IncludeRules context="preExpression"/>
1360 <IncludeRules context="pop_end"/>
1361 <IncludeRules context="postExpression"/>
1362 </context>
1363
1364 <!-- type record
1365
1366 type_definition_record ::=
1367 *record*
1368 element_declaration
1369 { element_declaration }
1370 *end* *record* [ identifier ]
1371 -->
1372 <context name="type_record" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="type_body">
1373 <RegExpr attribute="Keyword" context="#pop" insensitive="1"
1374 String="&bos;end\s+record(\s+&identifier;)?\s*;" endRegion="sig"/>
1375 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
1376 String="end" endRegion="sig"/>
1377 </context>
1378
1379 <!-- type protected
1380
1381 type_definition_protected ::=
1382 *protected*
1383 { protected_type_declarative_item }
1384 *end* *protected* [ identifier ]
1385 | *protected* *body*
1386 { process_declarative_item }
1387 *end *protected* *body* [ simple name ]
1388 -->
1389 <context name="type_protected" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="type_protected_stmt">
1390 <IncludeRules context="blank"/>
1391 <WordDetect attribute="Keyword" context="type_protected_stmt" insensitive="1" String="body"/>
1392 <RegExpr attribute="Keyword" context="#pop" insensitive="1"
1393 String="&bos;end\s+protected(\s+body)?(\s+&identifier;)?\s*;" endRegion="BlockRegion1"/>
1394 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
1395 String="end" endRegion="BlockRegion1"/>
1396 </context>
1397
1398 <context name="type_protected_stmt" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
1399 <IncludeRules context="blank"/>
1400 <IncludeRules context="process_declarative_start_expr"/>
1401 <IncludeRules context="start_simple_expr"/>
1402 </context>
1403
1404 <!--
1405 view ::=
1406 *view* identifier *of* name *is*
1407 element_declaration
1408 { element_declaration }
1409 *end* *view* [ identifier ] ;
1410 -->
1411 <context name="view" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="type_body">
1412 <RegExpr attribute="Keyword" context="#pop" insensitive="1"
1413 String="&bos;end\s+view(\s+&identifier;)?\s*;" endRegion="sig"/>
1414 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
1415 String="end" endRegion="sig"/>
1416 </context>
1417
1418 <!--
1419 function ::=
1420 *function* designator
1421 [ *generic* ( interface_list )
1422 [ generic_map_aspect ] ]
1423 [ [ *parameter* ] ( interface_list ) ] *return* name ;
1424
1425 | *function* identifier *is* *new* name
1426 [ name_list ]
1427 [ *return* name ]
1428 [ generic_map_aspect ] ;
1429
1430 | *function* identifier *is*
1431 { process_declarative_item }
1432 *begin*
1433 { sequential_statement }
1434 *end* [ *function* ] [ designator ] ;
1435 -->
1436 <context name="function" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="function_name">
1437 <IncludeRules context="blank"/>
1438 <DetectIdentifier attribute="Name" context="function_name"/>
1439 <RangeDetect attribute="Vector" context="function_name" char=""" char1="""/>
1440 <RangeDetect attribute="Name" context="function_name" char="\" char1="\"/>
1441 </context>
1442
1443 <context name="function_name" attribute="Normal Text" lineEndContext="#stay">
1444 <IncludeRules context="blank"/>
1445 <DetectChar attribute="Normal Text" context="function_params" char="("/>
1446 <DetectChar attribute="Normal Text" context="#pop#pop" char=";"/>
1447 <WordDetect attribute="Control" context="function_return" insensitive="1" String="return"/>
1448 <WordDetect attribute="Keyword" context="#pop#pop!function_is" insensitive="1" String="is" beginRegion="FunctionRegion1"/>
1449 <keyword attribute="Keyword" context="#stay" String="keywords"/>
1450 </context>
1451
1452 <context name="function_params" attribute="Normal Text" lineEndContext="#stay">
1453 <IncludeRules context="preExpression"/>
1454 <DetectChar attribute="Normal Text" context="#pop" char=")"/>
1455 <IncludeRules context="pop_end"/>
1456 <DetectChar attribute="Normal Text" context="function_params_recursive" char="("/>
1457 <WordDetect attribute="Error" context="#pop!function_return" insensitive="1" String="return"/>
1458 <keyword attribute="Signal" String="signals"/>
1459 <IncludeRules context="postExpression"/>
1460 </context>
1461 <context name="function_params_recursive" attribute="Normal Text" lineEndContext="#stay">
1462 <IncludeRules context="preExpression"/>
1463 <DetectChar attribute="Normal Text" context="#pop" char=")"/>
1464 <DetectChar attribute="Normal Text" context="function_params_recursive" char="("/>
1465 <WordDetect context="#pop" insensitive="1" String="return" lookAhead="1"/>
1466 <IncludeRules context="postExpression"/>
1467 </context>
1468
1469 <context name="function_return" attribute="Normal Text" lineEndContext="#stay">
1470 <IncludeRules context="preExpression"/>
1471 <DetectChar attribute="Normal Text" context="#pop#pop#pop" char=";"/>
1472 <WordDetect attribute="Keyword" context="#pop#pop#pop!function_is" insensitive="1" String="is" beginRegion="FunctionRegion1"/>
1473 <IncludeRules context="postExpression"/>
1474 </context>
1475
1476 <context name="function_is" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!function_decl">
1477 <IncludeRules context="blank"/>
1478 <WordDetect attribute="Keyword" context="#pop!function_new" insensitive="1" String="new"/>
1479 </context>
1480
1481 <context name="function_new" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!sequential_stmt_expr">
1482 <IncludeRules context="blank"/>
1483 <WordDetect attribute="Control" context="#pop!sequential_stmt_expr" insensitive="1" String="return"/>
1484 <IncludeRules context="start_simple_expr_then_pop"/>
1485 </context>
1486
1487 <context name="function_decl" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
1488 <IncludeRules context="blank"/>
1489 <IncludeRules context="process_declarative_start_expr"/>
1490 <WordDetect attribute="Redirection" context="#pop!function_begin" insensitive="true" String="begin"/>
1491 <IncludeRules context="start_simple_expr"/>
1492 </context>
1493
1494 <context name="function_begin" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt">
1495 <RegExpr attribute="Redirection" context="#pop" insensitive="1"
1496 String="&bos;end(\s+function\b)?(\s+&designator;)?\s*;" endRegion="FunctionRegion1"/>
1497 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
1498 String="end" endRegion="FunctionRegion1"/>
1499 </context>
1500
1501 <!--
1502 procedure ::=
1503 *procedure* designator
1504 [ *generic* ( interface_list )
1505 [ generic_map_aspect ] ]
1506 [ [ *parameter* ] ( interface_list ) ] ;
1507
1508 | *procedure* identifier *is* *new* name
1509 [ name_list ]
1510 [ *return* name ]
1511 [ generic_map_aspect ] ;
1512
1513 | *procedure* designator
1514 [ [ *parameter* ] ( interface_list ) ] *is*
1515 { process_declarative_item }
1516 *begin*
1517 { sequential_statement }
1518 *end* [ *procedure* ] [ designator ] ;
1519 -->
1520 <context name="procedure" attribute="Normal Text" lineEndContext="#stay">
1521 <IncludeRules context="blank"/>
1522 <DetectIdentifier attribute="Name" context="procedure_name"/>
1523 <RangeDetect attribute="Vector" context="procedure_name" char=""" char1="""/>
1524 <RangeDetect attribute="Name" context="procedure_name" char="\" char1="\"/>
1525 </context>
1526
1527 <context name="procedure_name" attribute="Normal Text" lineEndContext="#stay">
1528 <IncludeRules context="blank"/>
1529 <IncludeRules context="enclosed_interface_list"/>
1530 <DetectChar attribute="Normal Text" context="#pop#pop" char=";" endRegion="ProcedureRegion1"/>
1531 <WordDetect attribute="Control" context="#pop#pop!procedure_is" insensitive="true" String="is"/>
1532 <!-- ghdl extension ?
1533 procedure readline (variable f: in text; l: inout line) <- no ;
1534 procedure readline (file f: text; l: inout line)
1535 is ...
1536 -->
1537 <WordDetect attribute="Keyword" context="#pop" insensitive="true" String="procedure" endRegion="ProcedureRegion1" beginRegion="ProcedureRegion1"/>
1538 <keyword attribute="Keyword" context="#stay" String="keywords"/>
1539 </context>
1540
1541 <context name="procedure_is" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!procedure_is2">
1542 <IncludeRules context="function_is"/>
1543 </context>
1544
1545 <!-- ghdl extension ?
1546 *procedure* designator
1547 (...) is
1548 (...) is <- here
1549 begin ...
1550 -->
1551 <context name="procedure_is2" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop!procedure_decl">
1552 <IncludeRules context="blank"/>
1553 <IncludeRules context="enclosed_interface_list"/>
1554 <WordDetect attribute="Control" context="#pop!procedure_is" insensitive="true" String="is"/>
1555 <WordDetect attribute="Keyword" insensitive="true" String="parameter"/>
1556 </context>
1557
1558 <context name="procedure_decl" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt_expr">
1559 <IncludeRules context="blank"/>
1560 <IncludeRules context="process_declarative_start_expr"/>
1561 <WordDetect attribute="Keyword" context="#pop!procedure_begin" insensitive="true" String="begin" endRegion="ProcedureRegion1" beginRegion="ProcedureRegion1"/>
1562 <IncludeRules context="start_simple_expr"/>
1563 </context>
1564
1565 <context name="procedure_begin" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="sequential_stmt">
1566 <RegExpr attribute="Keyword" context="#pop" insensitive="1"
1567 String="&bos;end(\s+procedure)?(\s+&designator;)?\s*;" endRegion="ProcedureRegion1"/>
1568 <WordDetect attribute="Error" context="#pop!expressionError" insensitive="true"
1569 String="end" endRegion="ProcedureRegion1"/>
1570 </context>
1571
1572 <!--
1573 component ::=
1574 *component* identifier [ *is* ]
1575 entity_header
1576 *end* *component* [ identifier ] ;
1577 -->
1578 <context name="component" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
1579 <IncludeRules context="blank"/>
1580 <RegExpr attribute="Name" context="component_main" beginRegion="ComponentRegion1"
1581 String="(&identifier;)"/>
1582 </context>
1583
1584 <context name="component_main" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="component_body">
1585 <RegExpr attribute="Control" context="#pop#pop" dynamic="1" insensitive="1"
1586 String="&bos;end\s+component\b(\s+%1)?\s*;" endRegion="ComponentRegion1"/>
1587 <WordDetect attribute="Error" context="#pop#pop!expressionError" insensitive="true"
1588 String="end" endRegion="ComponentRegion1"/>
1589 </context>
1590
1591 <context name="component_body" attribute="Normal Text" lineEndContext="#stay">
1592 <IncludeRules context="entity_header"/>
1593 <IncludeRules context="pop_end"/>
1594 <DetectIdentifier attribute="Error"/>
1595 </context>
1596
1597 <context name="pop_end" attribute="Normal Text" lineEndContext="#stay">
1598 <WordDetect context="#pop" insensitive="1" String="end" lookAhead="1"/>
1599 </context>
1600
1601 </contexts>
1602 <itemDatas>
1603 <itemData name="Normal Text" defStyleNum="dsNormal"/>
1604 <itemData name="Keyword" defStyleNum="dsKeyword"/>
1605 <itemData name="Data Type" defStyleNum="dsDataType"/>
1606 <itemData name="Comment" defStyleNum="dsComment"/>
1607 <itemData name="Integer" defStyleNum="dsDecVal"/>
1608 <itemData name="Exponent" defStyleNum="dsFloat"/>
1609 <itemData name="Based Integer" defStyleNum="dsBaseN"/>
1610 <itemData name="Reference" defStyleNum="dsFunction"/>
1611 <itemData name="Error" defStyleNum="dsError" bold="1"/>
1612 <itemData name="Vector" defStyleNum="dsString"/>
1613 <itemData name="Operator" defStyleNum="dsOthers"/>
1614 <itemData name="Attribute" defStyleNum="dsBaseN"/>
1615 <itemData name="Signal" defStyleNum="dsOthers"/>
1616 <itemData name="Range" defStyleNum="dsOthers"/>
1617 <itemData name="Redirection" defStyleNum="dsAttribute" bold="1"/> <!-- #223388 -->
1618 <itemData name="Process" defStyleNum="dsSpecialChar" bold="1"/> <!-- #0099AA -->
1619 <itemData name="Control" defStyleNum="dsControlFlow"/> <!-- #223388 -->
1620 <itemData name="Name" defStyleNum="dsDecVal" bold="1"/> <!-- #bb6600 -->
1621 </itemDatas>
1622 </highlighting>
1623 <general>
1624 <comments>
1625 <comment name="singleLine" start="--" position="afterwhitespace"/>
1626 </comments>
1627 <keywords casesensitive="0"/>
1628 </general>
1629 </language>
1630 <!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->