A.2
VHDL Syntax

In the rules that follow an
underline (
like this
) indicates syntax that is present in VHDL-93, but not in VHDL-87. A
strikethrough (
like this
) indicates syntax that is present in VHDL-87, but not in VHDL-93; this occurs only in the rule for
file_declaration
(rule
38
). This means that any VHDL-87 code that contains keywords
in
or
out
in a file declaration will not compile in a VHDL-93 environment. Except for this one exception, VHDL-93 is a superset of VHDL-87.

The VHDL productions are in alphabetical order. The highest-level production is the definition for
design_file
; this is where you start to traverse the tree starting at the top level. The following parts (indicated by the use of uppercase in the BNF) are the lowest-level constructions:
UPPER_CASE_LETTER
(
A–Z
plus accented uppercase letters),
LOWER_CASE_LETTER
(
a–z
and accented lowercase letters,
é
, and so on),
LETTER
(either uppercase or lowercase letters,
a–Z
, and all accented letters),
DIGIT
(
0–9
),
SPACE_CHARACTER
(
' '
and
nonbreaking space),
UNDERLINE
(
'_'
),
SPECIAL_CHARACTER
(
" # & ' () * + , - . / : ; < = > [ ] _ |
), and
OTHER_SPECIAL_CHARACTER
(all remaining characters such as
! $ % @ ?
and so on, but not including
format effectors). Format effectors are the ISO (and ASCII) characters called
horizontal tabulation,
vertical tabulation,
carriage return,
line feed, and
form feed.

Keywords are shown in
bold
. Notice that the terms
label, literal,
and
range
are keywords (
label
,
literal
,
range
) and are also used as the name of a part (
label
,
literal
,
range
), as they are in the LRM. Construct names that commence with
italics
, such as
time
_expression
, are intended to make the syntax definitions easier to read. The italic part of the construct is treated as a comment. You look up the definition for
time
_expression
under
'e'
for expression, not
't'
for time. There are no formal definitions of the italic modifiers; if you are not sure exactly what is meant, you must look up the semantics in the body of the LRM.