1abstract_literal ::= decimal_literal | based_literal
2
3access_type_definition ::= access subtype_indication
4
5actual_designator ::=
6	expression
7	| signal_name
8	| variable_name
9	| file_name
10	| open
11
12actual_parameter_part ::= parameter_association_list
13
14actual_part ::=
15	actual_designator
16	| function_name ( actual_designator )
17	| type_mark ( actual_designator )
18
19adding_operator ::= + | -  | &
20
21aggregate ::=
22	( element_association { , element_association } )
23
24alias_declaration ::=
25	alias alias_designator [ : subtype_indication ] is name [ signature ] ;
26
27alias_designator ::= identifier | character_literal | operator_symbol
28
29allocator ::=
30	new subtype_indication
31	| new qualified_expression
32
33architecture_body ::=
34	architecture identifier of entity_name is
35		architecture_declarative_part
36	begin
37		architecture_statement_part
38	end [ architecture ] [ architecture_simple_name ] ;
39
40architecture_declarative_part ::=
41	{ block_declarative_item }
42
43architecture_statement_part ::=
44	{ concurrent_statement }
45
46array_type_definition ::=
47	unconstrained_array_definition	|   constrained_array_definition
48
49assertion ::=
50	assert condition
51		[ report expression ]
52		[ severity expression ]
53
54assertion_statement ::=	 [ label : ] assertion ;
55
56association_element ::=
57	[ formal_part => ] actual_part
58
59association_list ::=
60	association_element { , association_element }
61
62attribute_declaration ::=
63	attribute identifier : type_mark ;
64
65attribute_designator ::= attribute_simple_name
66
67attribute_name ::=
68	prefix [ signature ] ' attribute_designator [ ( expression ) ]
69
70attribute_specification ::=
71	attribute attribute_designator of entity_specification is expression ;
72
73base ::= integer
74
75base_specifier ::=  B | O | X
76
77base_unit_declaration ::= identifier ;
78
79based_integer ::=
80	extended_digit { [ underline ] extended_digit }
81
82based_literal ::=
83	base # based_integer [ . based_integer ] # [ exponent ]
84
85basic_character ::=
86	basic_graphic_character | format_effector
87
88basic_graphic_character ::=
89	upper_case_letter | digit | special_character| space_character
90
91basic_identifier ::=
92	letter { [ underline ] letter_or_digit }
93
94binding_indication ::=
95	[ use entity_aspect ]
96	[ generic_map_aspect ]
97	[ port_map_aspect ]
98
99bit_string_literal ::=	base_specifier " bit_value "
100
101bit_value ::= extended_digit { [ underline ] extended_digit }
102
103block_configuration ::=
104	for block_specification
105		{ use_clause }
106		{ configuration_item }
107	end for ;
108
109block_declarative_item ::=
110	subprogram_declaration
111	| subprogram_body
112	| type_declaration
113	| subtype_declaration
114	| constant_declaration
115	| signal_declaration
116	| shared_variable_declaration
117	| file_declaration
118	| alias_declaration
119	| component_declaration
120	| attribute_declaration
121	| attribute_specification
122	| configuration_specification
123	| disconnection_specification
124	| use_clause
125	| group_template_declaration
126	| group_declaration
127
128block_declarative_part ::=
129	{ block_declarative_item }
130
131block_header ::=
132	[ generic_clause
133	[ generic_map_aspect ; ] ]
134	[ port_clause
135	[ port_map_aspect ; ] ]
136
137block_specification ::=
138	architecture_name
139	| block_statement_label
140	| generate_statement_label [ ( index_specification ) ]
141
142block_statement ::=
143	block_label :
144		block [ ( guard_expression ) ] [ is ]
145			block_header
146			block_declarative_part
147		begin
148			block_statement_part
149		end block [ block_label ] ;
150
151block_statement_part ::=
152	{ concurrent_statement }
153
154case_statement ::=
155	[ case_label : ]
156		case expression is
157			case_statement_alternative
158			{ case_statement_alternative }
159		end case [ case_label ] ;
160
161case_statement_alternative ::=
162	when choices =>
163		sequence_of_statements
164
165character_literal ::= ' graphic_character '
166
167choice ::=
168	simple_expression
169	| discrete_range
170	| element_simple_name
171	| others
172
173choices ::= choice { | choice }
174
175component_configuration ::=
176	for component_specification
177		[ binding_indication ; ]
178		[ block_configuration ]
179	end for ;
180
181component_declaration ::=
182	component identifier [ is ]
183		[ local_generic_clause ]
184		[ local_port_clause ]
185	end component [ component_simple_name ] ;
186
187component_instantiation_statement ::=
188	instantiation_label :
189		instantiated_unit
190			[ generic_map_aspect ]
191			[ port_map_aspect ] ;
192
193component_specification ::=
194	instantiation_list : component_name
195
196composite_type_definition ::=
197	array_type_definition
198	| record_type_definition
199
200concurrent_assertion_statement ::=
201	[ label : ] [ postponed ] assertion ;
202
203concurrent_procedure_call_statement ::=
204	[ label : ] [ postponed ] procedure_call ;
205
206concurrent_signal_assignment_statement ::=
207	  [ label : ] [ postponed ] conditional_signal_assignment
208	| [ label : ] [ postponed ] selected_signal_assignment
209
210concurrent_statement ::=
211	block_statement
212	| process_statement
213	| concurrent_procedure_call_statement
214	| concurrent_assertion_statement
215	| concurrent_signal_assignment_statement
216	| component_instantiation_statement
217	| generate_statement
218
219condition ::= boolean_expression
220
221condition_clause ::= until condition
222
223conditional_signal_assignment ::=
224	target	<= options conditional_waveforms ;
225
226conditional_waveforms ::=
227	{ waveform when condition else }
228	waveform [ when condition ]
229
230configuration_declaration ::=
231	configuration identifier of entity_name is
232		configuration_declarative_part
233		block_configuration
234	end [ configuration ] [ configuration_simple_name ] ;
235
236configuration_declarative_item ::=
237	use_clause
238	| attribute_specification
239	| group_declaration
240
241configuration_declarative_part ::=
242	{ configuration_declarative_item }
243
244configuration_item ::=
245	block_configuration
246	| component_configuration
247
248configuration_specification ::=
249	for component_specification binding_indication ;
250
251constant_declaration ::=
252	constant identifier_list : subtype_indication [ := expression ] ;
253
254constrained_array_definition ::=
255	array index_constraint of element_subtype_indication
256
257constraint ::=
258	range_constraint
259	| index_constraint
260
261context_clause ::= { context_item }
262
263context_item ::=
264	library_clause
265	| use_clause
266
267decimal_literal ::= integer [ . integer ] [ exponent ]
268
269declaration ::=
270	type_declaration
271	| subtype_declaration
272	| object_declaration
273	| interface_declaration
274	| alias_declaration
275	| attribute_declaration
276	| component_declaration
277	| group_template_declaration
278	| group_declaration
279	| entity_declaration
280	| configuration_declaration
281	| subprogram_declaration
282	| package_declaration
283
284delay_mechanism ::=
285	transport
286	| [ reject time_expression ] inertial
287
288design_file ::= design_unit { design_unit }
289
290design_unit ::= context_clause library_unit
291
292designator ::= identifier  |  operator_symbol
293
294direction ::= to | downto
295
296disconnection_specification ::=
297	disconnect guarded_signal_specification after time_expression ;
298
299discrete_range ::= discrete_subtype_indication | range
300
301element_association ::=
302	[ choices => ] expression
303
304element_declaration ::=
305	identifier_list : element_subtype_definition ;
306
307element_subtype_definition ::= subtype_indication
308
309entity_aspect ::=
310	  entity entity_name [ ( architecture_identifier) ]
311	| configuration configuration_name
312	| open
313
314entity_class ::=
315	entity	     | architecture  | configuration
316	| procedure  | function	     | package
317	| type	     | subtype	     | constant
318	| signal     | variable	     | component
319	| label	     | literal	     | units
320	| group	     | file
321
322entity_class_entry ::=	entity_class [ <> ]
323
324entity_class_entry_list ::=
325	entity_class_entry { , entity_class_entry }
326
327entity_declaration ::=
328	entity identifier is
329		entity_header
330		entity_declarative_part
331      [ begin
332		entity_statement_part ]
333	end [ entity ] [ entity_simple_name ] ;
334
335entity_declarative_item ::=
336	subprogram_declaration
337	| subprogram_body
338	| type_declaration
339	| subtype_declaration
340	| constant_declaration
341	| signal_declaration
342	| shared_variable_declaration
343	| file_declaration
344	| alias_declaration
345	| attribute_declaration
346	| attribute_specification
347	| disconnection_specification
348	| use_clause
349	| group_template_declaration
350	| group_declaration
351
352entity_declarative_part ::=
353	{ entity_declarative_item }
354
355entity_designator ::= entity_tag [ signature ]
356
357entity_header ::=
358	[ formal_generic_clause ]
359	[ formal_port_clause ]
360
361entity_name_list ::=
362	entity_designator { , entity_designator }
363	| others
364	| all
365
366entity_specification ::=
367	entity_name_list : entity_class
368
369entity_statement ::=
370	concurrent_assertion_statement
371	| passive_concurrent_procedure_call_statement
372	| passive_process_statement
373
374entity_statement_part ::=
375	{ entity_statement }
376
377entity_tag ::=	simple_name | character_literal | operator_symbol
378
379enumeration_literal ::= identifier | character_literal
380
381enumeration_type_definition ::=
382	( enumeration_literal { , enumeration_literal } )
383
384exit_statement ::=
385	[ label : ] exit [ loop_label ] [ when condition ] ;
386
387exponent ::= E [ + ] integer | E - integer
388
389expression ::=
390	  relation { and relation }
391	| relation { or relation }
392	| relation { xor relation }
393	| relation [ nand relation ]
394	| relation [ nor relation ]
395	| relation { xnor relation }
396
397extended_digit ::= digit | letter
398
399extended_identifier ::=
400	\ graphic_character { graphic_character } \
401
402factor ::=
403	primary [ ** primary ]
404	| abs primary
405	| not primary
406
407file_declaration ::=
408	file identifier_list : subtype_indication file_open_information ] ;
409
410file_logical_name ::= string_expression
411
412file_open_information ::=
413	[ open file_open_kind_expression ] is file_logical_name
414
415file_type_definition ::=
416	file  of type_mark
417
418floating_type_definition  :=  range_constraint
419
420formal_designator ::=
421	generic_name
422	| port_name
423	| parameter_name
424
425formal_parameter_list ::= parameter_interface_list
426
427formal_part ::=
428	formal_designator
429	| function_name ( formal_designator )
430	| type_mark ( formal_designator )
431
432full_type_declaration ::=
433	type identifier is type_definition ;
434
435function_call ::=
436	function_name [ ( actual_parameter_part ) ]
437
438generate_statement ::=
439	generate_label :
440		generation_scheme generate
441			[ { block_declarative_item }
442		begin ]
443			{ concurrent_statement }
444		end generate [ generate_label ] ;
445
446generation_scheme ::=
447	for generate_parameter_specification
448	| if condition
449
450generic_clause ::=
451	generic ( generic_list ) ;
452
453generic_list ::= generic_interface_list
454
455generic_map_aspect ::=
456	generic map ( generic_association_list )
457
458graphic_character ::=
459	basic_graphic_character	 | lower_case_letter | other_special_character
460
461group_constituent ::= name | character_literal
462
463group_constituent_list ::= group_constituent { , group_constituent }
464
465group_template_declaration ::=
466	group identifier is ( entity_class_entry_list ) ;
467
468group_declaration ::=
469	group identifier : group_template_name ( group_constituent_list ) ;
470
471guarded_signal_specification ::=
472	guarded_signal_list : type_mark
473
474identifier ::=
475	basic_identifier | extended_identifier
476
477identifier_list ::= identifier { , identifier }
478
479if_statement ::=
480	[ if_label : ]
481		if condition then
482			sequence_of_statements
483		{ elsif condition then
484			sequence_of_statements }
485		[ else
486			sequence_of_statements ]
487		end if [ if_label ] ;
488
489incomplete_type_declaration ::=	 type identifier ;
490
491index_constraint ::= ( discrete_range { , discrete_range } )
492
493index_specification ::=
494	discrete_range
495	| static_expression
496
497index_subtype_definition ::= type_mark range <>
498
499indexed_name ::= prefix ( expression { , expression } )
500
501instantiated_unit ::=
502	[ component ] component_name
503	| entity entity_name [ ( architecture_identifier ) ]
504	| configuration configuration_name
505
506instantiation_list ::=
507	instantiation_label { , instantiation_label }
508	| others
509	| all
510
511integer ::= digit { [ underline ] digit }
512
513integer_type_definition ::= range_constraint
514
515interface_constant_declaration ::=
516	[ constant ] identifier_list : [ in ] subtype_indication [ := static_expression ]
517
518interface_declaration ::=
519	interface_constant_declaration
520	| interface_signal_declaration
521	| interface_variable_declaration
522	| interface_file_declaration
523
524interface_element ::= interface_declaration
525
526interface_file_declaration ::=
527	file identifier_list : subtype_indication
528
529interface_list ::=
530	interface_element { ; interface_element }
531
532interface_signal_declaration ::=
533	[signal] identifier_list : [ mode ] subtype_indication [ bus ] [ := static_expression ]
534
535interface_variable_declaration ::=
536	[variable] identifier_list : [ mode ] subtype_indication [ := static_expression ]
537
538iteration_scheme ::=
539	while condition
540	| for loop_parameter_specification
541
542label ::= identifier
543
544letter ::= upper_case_letter | lower_case_letter
545
546letter_or_digit ::= letter | digit
547
548library_clause ::= library logical_name_list ;
549
550library_unit ::=
551	primary_unit
552	| secondary_unit
553
554literal ::=
555	numeric_literal
556	| enumeration_literal
557	| string_literal
558	| bit_string_literal
559	| null
560
561logical_name ::= identifier
562
563logical_name_list ::= logical_name { , logical_name }
564
565logical_operator ::= and | or | nand | nor | xor | xnor
566
567loop_statement ::=
568	[ loop_label : ]
569		[ iteration_scheme ] loop
570			sequence_of_statements
571		end loop [ loop_label ] ;
572
573miscellaneous_operator ::= ** | abs | not
574
575mode ::= in | out | inout | buffer | linkage
576
577multiplying_operator ::= * | / | mod | rem
578
579name ::=
580	simple_name
581	| operator_symbol
582	| selected_name
583	| indexed_name
584	| slice_name
585	| attribute_name
586
587next_statement ::=
588	[ label : ] next [ loop_label ] [ when condition ] ;
589
590null_statement ::= [ label : ] null ;
591
592numeric_literal ::=
593	abstract_literal
594	| physical_literal
595
596object_declaration ::=
597	constant_declaration
598	| signal_declaration
599	| variable_declaration
600	| file_declaration
601
602operator_symbol ::= string_literal
603
604options ::= [ guarded ] [ delay_mechanism ]
605
606package_body ::=
607	package body package_simple_name is
608		package_body_declarative_part
609	end [ package body ] [ package_simple_name ] ;
610
611package_body_declarative_item ::=
612	subprogram_declaration
613	| subprogram_body
614	| type_declaration
615	| subtype_declaration
616	| constant_declaration
617	| shared_variable_declaration
618	| file_declaration
619	| alias_declaration
620	| use_clause
621	| group_template_declaration
622	| group_declaration
623
624package_body_declarative_part ::=
625	{ package_body_declarative_item }
626
627package_declaration ::=
628	package identifier is
629		package_declarative_part
630	end [ package ] [ package_simple_name ] ;
631
632package_declarative_item ::=
633	subprogram_declaration
634	| type_declaration
635	| subtype_declaration
636	| constant_declaration
637	| signal_declaration
638	| shared_variable_declaration
639	| file_declaration
640	| alias_declaration
641	| component_declaration
642	| attribute_declaration
643	| attribute_specification
644	| disconnection_specification
645	| use_clause
646	| group_template_declaration
647	| group_declaration
648
649package_declarative_part ::=
650	{ package_declarative_item }
651
652parameter_specification ::=
653	identifier in discrete_range
654
655physical_literal ::= [ abstract_literal ] unit_name
656
657physical_type_definition ::=
658	range_constraint
659		units
660			base_unit_declaration
661			{ secondary_unit_declaration }
662		end units [ physical_type_simple_name ]
663
664port_clause ::=
665	port ( port_list ) ;
666
667port_list ::= port_interface_list
668
669port_map_aspect ::=
670	port map ( port_association_list )
671
672prefix ::=
673	name
674	| function_call
675
676primary ::=
677	name
678	| literal
679	| aggregate
680	| function_call
681	| qualified_expression
682	| type_conversion
683	| allocator
684	| ( expression )
685
686primary_unit ::=
687	entity_declaration
688	| configuration_declaration
689	| package_declaration
690
691procedure_call ::= procedure_name [ ( actual_parameter_part ) ]
692
693procedure_call_statement ::=
694	[ label : ] procedure_call ;
695
696process_declarative_item ::=
697	subprogram_declaration
698	| subprogram_body
699	| type_declaration
700	| subtype_declaration
701	| constant_declaration
702	| variable_declaration
703	| file_declaration
704	| alias_declaration
705	| attribute_declaration
706	| attribute_specification
707	| use_clause
708	| group_template_declaration
709	| group_declaration
710
711process_declarative_part ::=
712	{ process_declarative_item }
713
714process_statement ::=
715	[ process_label : ]
716		[ postponed ] process [ ( sensitivity_list ) ] [ is ]
717			process_declarative_part
718		begin
719			process_statement_part
720		end [ postponed ] process [ process_label ] ;
721
722process_statement_part ::=
723	{ sequential_statement }
724
725qualified_expression ::=
726	type_mark ' ( expression )
727	| type_mark ' aggregate
728
729range ::=
730	range_attribute_name
731	| simple_expression direction simple_expression
732
733range_constraint ::= range range
734
735record_type_definition ::=
736	record
737		element_declaration
738		{ element_declaration }
739	end record [ record_type_simple_name ]
740
741relation ::=
742	shift_expression [ relational_operator shift_expression ]
743
744relational_operator ::=	  =  |	/=  |  <  |  <=	 |  >  |  >=
745
746report_statement ::=
747	[ label : ]
748		report expression
749			[ severity expression ] ;
750
751return_statement ::=
752	[ label : ] return [ expression ] ;
753
754scalar_type_definition ::=
755	enumeration_type_definition   | integer_type_definition
756	| floating_type_definition	  | physical_type_definition
757
758secondary_unit ::=
759	architecture_body
760	| package_body
761
762secondary_unit_declaration ::=	identifier = physical_literal ;
763
764selected_name ::= prefix . suffix
765
766selected_signal_assignment ::=
767	with expression select
768		target	<= options selected_waveforms ;
769
770selected_waveforms ::=
771	{ waveform when choices , }
772	waveform when choices
773
774sensitivity_clause ::=	on sensitivity_list
775
776sensitivity_list ::= signal_name { , signal_name }
777
778sequence_of_statements ::=
779	{ sequential_statement }
780
781sequential_statement ::=
782	wait_statement
783	| assertion_statement
784	| report_statement
785	| signal_assignment_statement
786	| variable_assignment_statement
787	| procedure_call_statement
788	| if_statement
789	| case_statement
790	| loop_statement
791	| next_statement
792	| exit_statement
793	| return_statement
794	| null_statement
795
796shift_expression ::=
797	simple_expression [ shift_operator simple_expression ]
798
799shift_operator ::= sll | srl | sla | sra | rol | ror
800
801sign ::= + | -
802
803signal_assignment_statement ::=
804	[ label : ] target <= [ delay_mechanism ] waveform ;
805
806signal_declaration ::=
807	signal identifier_list : subtype_indication [ signal_kind ] [ := expression ] ;
808
809signal_kind ::=	 register  |  bus
810
811signal_list ::=
812	signal_name { , signal_name }
813	| others
814	| all
815
816signature ::= [ [ type_mark { , type_mark } ] [ return type_mark ] ]
817
818simple_expression ::=
819	[ sign ] term { adding_operator term }
820
821simple_name ::=	 identifier
822
823slice_name ::=	prefix ( discrete_range )
824
825string_literal ::= " { graphic_character } "
826
827subprogram_body ::=
828	subprogram_specification is
829		subprogram_declarative_part
830	begin
831		subprogram_statement_part
832	end [ subprogram_kind ] [ designator ] ;
833
834subprogram_declaration ::=
835	subprogram_specification ;
836
837subprogram_declarative_item ::=
838	subprogram_declaration
839	| subprogram_body
840	| type_declaration
841	| subtype_declaration
842	| constant_declaration
843	| variable_declaration
844	| file_declaration
845	| alias_declaration
846	| attribute_declaration
847	| attribute_specification
848	| use_clause
849	| group_template_declaration
850	| group_declaration
851
852subprogram_declarative_part ::=
853	{ subprogram_declarative_item }
854
855subprogram_kind ::= procedure | function
856
857subprogram_specification ::=
858	procedure designator [ ( formal_parameter_list ) ]
859	| [ pure | impure ]  function designator [ ( formal_parameter_list ) ]
860		return type_mark
861
862subprogram_statement_part ::=
863	{ sequential_statement }
864
865subtype_declaration ::=
866	subtype identifier is subtype_indication ;
867
868subtype_indication ::=
869	[ resolution_function_name ] type_mark [ constraint ]
870
871suffix ::=
872	simple_name
873	| character_literal
874	| operator_symbol
875	| all
876
877target ::=
878	name
879	| aggregate
880
881term ::=
882	factor { multiplying_operator factor }
883
884timeout_clause ::= for time_expression
885
886type_conversion ::= type_mark ( expression )
887
888type_declaration ::=
889	full_type_declaration
890	| incomplete_type_declaration
891
892type_definition ::=
893	scalar_type_definition
894	| composite_type_definition
895	| access_type_definition
896	| file_type_definition
897
898type_mark ::=
899	type_name
900	| subtype_name
901
902unconstrained_array_definition ::=
903	array ( index_subtype_definition { , index_subtype_definition } )
904		of element_subtype_indication
905
906use_clause ::=
907	use selected_name { , selected_name } ;
908
909variable_assignment_statement ::=
910	[ label : ] target  := expression ;
911
912variable_declaration ::=
913	[ shared ] variable identifier_list : subtype_indication [ := expression ] ;
914
915wait_statement ::=
916	[ label : ] wait [ sensitivity_clause ] [ condition_clause ] [ timeout_clause ] ;
917
918waveform ::=
919	waveform_element { , waveform_element }
920	| unaffected
921
922waveform_element ::=
923	value_expression [ after time_expression ]
924	| null [ after time_expression ]
925
926