From: Cliff Cummings (cliffc@sunburst)
Date: Mon Apr 13 1998 - 09:12:25 PDT
BAD MSG:
<HTML>
HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="GENERATOR" CONTENT="Mozilla/4.04 [en] (X11; I; SunOS 5.5.1 sun4m) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000">
<BR><TT><FONT SIZE=4><B>A.1 Source text </B></FONT></TT>
<BR><TT> </TT>
<BR><TT>source_text ::= { description } </TT>
<BR><TT>description ::= </TT>
<BR><TT> module_declaration </TT>
<BR><TT> | udp_declaration </TT>
<BR><TT>module_declaration ::= </TT>
<BR><TT> module_keyword <I>module</I>_identifier [ list_of_ports ] <B>;</B> { module_item } <B>endmodule</B> </TT>
<BR><TT>module_keyword ::= <B>module</B> | <B>macromodule</B> </TT>
<BR><TT>list_of_ports ::= <B>(</B> port { <B>,</B> port } <B>)</B> </TT>
<BR><TT>port ::= </TT>
<BR><TT> [ port_expression ] </TT>
<BR><TT> | . <I>port</I>_identifier <B>(</B> [ port_expression ] <B>)</B> </TT>
<BR><TT>port_expression ::= </TT>
<BR><TT> port_reference </TT>
<BR><TT> | { port_reference { <B>,</B> port_reference } } </TT>
<BR><TT>port_reference ::= </TT>
<BR><TT> <I>port</I>_identifier </TT>
<BR><TT> | <I>port</I>_identifier [ constant_expression ] </TT>
<BR><TT> | <I>port</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>
<BR><TT><FONT COLOR=#0000FF>1995>module_item ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> module_item_declaration </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | parameter_override </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | continuous_assign </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | gate_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | udp_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | module_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | specify_block </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | initial_construct </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | always_construct </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>module_item ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> ungeneratable_module_item_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | non_generated_module_item </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | generated_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | specify_block </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>ungeneratable_module_item_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> parameter_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | local_parameter_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | input_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | output_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | inout_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>non_generated_module_item ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> generatable_module_item_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | parameter_override </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | continuous_assign </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | gate_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | udp_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | module_instantiation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | initial_construct </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | always_construct </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>generatable_module_item_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> net_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | reg_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | integer_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | real_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | time_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | realtime_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | event_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | task_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | function_declaration </FONT></TT>
<BR><TT>module_item_declaration ::= </TT>
<BR><TT> parameter_declaration </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??> | local_parameter_declaration </FONT></TT>
<BR><TT> | input_declaration </TT>
<BR><TT> | output_declaration </TT>
<BR><TT> | inout_declaration </TT>
<BR><TT> | net_declaration </TT>
<BR><TT> | reg_declaration </TT>
<BR><TT> | integer_declaration </TT>
<BR><TT> | real_declaration </TT>
<BR><TT> | time_declaration </TT>
<BR><TT> | realtime_declaration </TT>
<BR><TT> | event_declaration </TT>
<BR><TT> | task_declaration </TT>
<BR><TT> | function_declaration </TT>
<BR><TT>parameter_override ::= <B>defparam</B> list_of_param_assignments <B>;</B> </TT>
<BR><TT> </TT>
<BR><TT><FONT SIZE=4><B>A.2 Declarations </B></FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#0000FF>1995>parameter_declaration ::= parameter list_of_param_assignments <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>parameter_declaration ::= parameter <B>[</B> range <B>]</B> list_of_param_assignments <B>;</B> </FONT></TT>
<BR><TT>list_of_param_assignments ::= param_assignment { <B>,</B> param_assignment } </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??>local_parameter_declaration ::= localparam list_of_local_param_assignments <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??>list_of_local_param_assignments ::= param_assignment { <B>,</B> param_assignment } </FONT></TT>
<BR><TT>param_assignment ::= <I>parameter</I>_identifier <B>=</B> constant_expression </TT>
<BR><TT><FONT COLOR=#0000FF>1995>input_declaration ::= <B>input</B> <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>output_declaration ::= <B>output</B> <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>inout_declaration ::= <B>inout</B> <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14>input_declaration ::= <B>input</B> [ <B>signed</B> ] [ net_type ] <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14>output_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14> <B>output</B> [ <B>signed</B> ] [ net_type ] <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14> | <B>output</B> [ <B>signed</B> ] [ reg_type ] <B>[</B> range <B>]</B> list_of_reg_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B09/B14>inout_declaration ::= <B>inout</B> [ <B>signed</B> ] [ net_type ] <B>[</B> range <B>]</B> list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT>list_of_port_identifiers ::= <I>port</I>_identifier { <B>,</B> <I>port</I>_identifier } </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B14>list_of_reg_port_identifiers ::= <I>port</I>_identifier [ <B>=</B> constant_expression ] { <B>,</B> <I>port</I>_identifier [ <B>=</B> constant_expression ] } </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>reg_declaration ::= <B>reg</B> <B>[</B> range <B>]</B> list_of_register_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>event_declaration ::= <B>event</B> <I>event</I>_identifier { <B>,</B> <I>event</I>_identifier } <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>list_of_real_identifiers ::= <I>real</I>_identifier { <B>,</B> <I>real</I>_identifier } </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>list_of_register_identifiers ::= register_name { <B>,</B> register_name } </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>register_name ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> <I>register</I>_identifier </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <I>memory</I>_identifier [ upper_limit_constant_expression <B>:</B> lower_limit_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>range ::= [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>list_of_net_identifiers ::= <I>net</I>_identifier { <B>,</B> <I>net</I>_identifier } </FONT></TT>
<BR><TT> (Question <B>-</B> were multi-dimensional tasks <B>and</B> functions also going to be permitted??? <B>-</B> </TT>
<BR><TT> NO?! <B>-</B> breaks assignment rule) </TT>
<BR><TT> (If this BNF is correct <B>for</B> multidimensional arrays, this will also be added to <B>automatic</B> tasks, etc.) </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02/BE??>reg_declaration ::= <B>reg</B> [ <B>signed</B> | <B>unsigned</B> ] <B>[</B> range <B>]</B> list_of_regmem_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>event_declaration ::= <B>event</B> list_of_event_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>list_of_regmem_identifiers ::= register_name | memory_name { <B>,</B> register_name | memory_name } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>list_of_register_identifiers ::= register_name { <B>,</B> register_name } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02/BE??>memory_name ::= <I>memory</I>_identifier [ upper_limit_constant_expression <B>:</B> lower_limit_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>register_name ::= <I>register</I>_identifier [ dimension { <B>,</B> dimension }] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>list_of_real_identifiers ::= <I>real</I>_identifier [ dimension { <B>,</B> dimension }] { <B>,</B> <I>real</I>_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>list_of_event_identifiers ::= <I>event</I>_identifier [ dimension { <B>,</B> dimension }] { <B>,</B> <I>event</I>_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>range ::= [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>dimension ::= [ dimension_constant_expression <B>:</B> dimension_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>list_of_net_identifiers ::= <I>net</I>_identifier [ dimension { <B>,</B> dimension }] { <B>,</B> <I>net</I>_identifier [ dimension { <B>,</B> dimension }] } </FONT></TT>
<BR><TT>time_declaration ::= <B>time</B> list_of_register_identifiers <B>;</B> </TT>
<BR><TT>integer_declaration ::= <B>integer</B> list_of_register_identifiers <B>;</B> </TT>
<BR><TT>real_declaration ::= <B>real</B> list_of_real_identifiers <B>;</B> </TT>
<BR><TT>realtime_declaration ::= <B>realtime</B> list_of_real_identifiers <B>;</B> </TT>
<BR><TT><FONT COLOR=#0000FF>1995>net_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> net_type [ <B>vectored</B> | <B>scalared</B> ] <B>[</B> range <B>]</B> [ delay3 ] list_of_net_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>trireg</B> [ <B>vectored</B> | <B>scalared</B> ] [ charge_strength ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> list_of_net_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | net_type [ <B>vectored</B> | <B>scalared</B> ] [ drive_strength ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19>net_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> net_type [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] <B>[</B> range <B>]</B> [ delay3 ] list_of_net_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> | <B>trireg</B> [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] [ charge_strength ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> list_of_net_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> | net_type [ <B>vectored</B> | <B>scalared</B> ] [ <B>signed</B> | <B>unsigned</B> ] [ drive_strength ] <B>[</B> range <B>]</B> [ delay3 ] </FONT></TT>
<BR><TT> list_of_net_decl_assignments <B>;</B> </TT>
<BR><TT>net_type ::= <B>wire</B> | <B>tri</B> | <B>tri1</B> | <B>supply0</B> | <B>wand</B> | <B>triand</B> | <B>tri0</B> | <B>supply1</B> | <B>wor</B> | <B>trior</B> </TT>
<BR><TT>drive_strength ::= </TT>
<BR><TT> <B>(</B> strength0 <B>,</B> strength1 <B>)</B> </TT>
<BR><TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>
<BR><TT> | <B>(</B> strength0 <B>,</B> <B>highz1</B> <B>)</B> </TT>
<BR><TT> | <B>(</B> strength1 <B>,</B> <B>highz0</B> <B>)</B> </TT>
<BR><TT> | <B>(</B> <B>highz0</B> <B>,</B> strength1 <B>)</B> </TT>
<BR><TT> | <B>(</B> <B>highz1</B> <B>,</B> strength0 <B>)</B> </TT>
<BR><TT>strength0 ::= <B>supply0</B> | <B>strong0</B> | <B>pull0</B> | <B>weak0</B> </TT>
<BR><TT>strength1 ::= <B>supply1</B> | <B>strong1</B> | <B>pull1</B> | <B>weak1</B> </TT>
<BR><TT>charge_strength ::= <B>(</B> <B>small</B> <B>)</B> | <B>(</B> <B>medium</B> <B>)</B> | <B>(</B> <B>large</B> <B>)</B> </TT>
<BR><TT>delay3 ::= <B>#</B> delay_value | <B>#</B> (delay_value [ <B>,</B> delay_value [ <B>,</B> delay_value ] ] <B>)</B> </TT>
<BR><TT>delay2 ::= <B>#</B> delay_value | <B>#</B> (delay_value [ <B>,</B> delay_value ] <B>)</B> </TT>
<BR><TT>delay_value ::= unsigned_number | <I>parameter</I>_identifier | constant_mintypmax_expression </TT>
<BR><TT>list_of_net_decl_assignments ::= net_decl_assignment { <B>,</B> net_decl_assignment } </TT>
<BR><TT>net_decl_assignment ::= <I>net</I>_identifier <B>=</B> expression </TT>
<BR><TT>function_declaration ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> <B>function</B> [signed] [ range_or_type ] <I>function</I>_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> <B>function</B> [signed] [ range_or_type ] <I>function</I>_identifier <B>;</B> </FONT></TT>
<BR><TT> function_item_declaration { function_item_declaration } </TT>
<BR><TT> statement </TT>
<BR><TT> <B>endfunction</B> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??>reg_type ::= <B>reg</B> | <B>integer</B> | <B>real</B> | <B>realtime</B> | <B>time</B> </FONT></TT>
<BR><TT>range_or_type ::= range | <B>integer</B> | <B>real</B> | <B>realtime</B> | <B>time</B> </TT>
<BR><TT>function_item_declaration ::= </TT>
<BR><TT> block_item_declaration </TT>
<BR><TT> | input_declaration </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>recursive_function_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> <B>function</B> [ <B>automatic</B> ] [ range_or_type ] <I>function</I>_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> recursive_function_item_declaration { function_item_declaration } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> <B>endfunction</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>range_or_type ::= range | <B>integer</B> | <B>real</B> | <B>realtime</B> | <B>time</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>recursive_function_item_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> automatic_block_item_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_input_declaration </FONT></TT>
<BR><TT>task_declaration ::= </TT>
<BR><TT> <B>task</B> <I>task</I>_identifier <B>;</B> </TT>
<BR><TT> { task_item_declaration } </TT>
<BR><TT><FONT COLOR=#0000FF>1995> statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> statement </FONT></TT>
<BR><TT> <B>endtask</B> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_task_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <B>task</B> combinational_task_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> { task_item_declaration } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> combinational_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <B>endtask</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>>task_argument_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>task_item_declaration ::= </FONT></TT>
<BR><TT> block_item_declaration </TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | input_declaration </FONT></TT>
<BR><TT> | output_declaration </TT>
<BR><TT> | inout_declaration </TT>
<BR><TT>block_item_declaration ::= </TT>
<BR><TT> parameter_declaration </TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | local_parameter_declaration </FONT></TT>
<BR><TT> | reg_declaration </TT>
<BR><TT> | integer_declaration </TT>
<BR><TT> | real_declaration </TT>
<BR><TT> | time_declaration </TT>
<BR><TT> | realtime_declaration </TT>
<BR><TT> | event_declaration </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>recursive_reentrant_task_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> task [ <B>automatic</B> ] <I>task</I>_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> { recursive_reentrant_task_item_declaration } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> endtask </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>recursive_reentrant_task_item_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> automatic_block_item_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_input_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_output_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_inout_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>automatic_block_item_declaration ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> parameter_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | local_parameter_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_reg_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_integer_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_time_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_real_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_realtime_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04> | automatic_event_declaration </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04/B19>automatic_input_declaration ::= <B>input</B> [ <B>automatic</B> ] [ <B>signed</B> ] list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04/B19>automatic_output_declaration ::= <B>output</B> [ <B>automatic</B> ] [ <B>signed</B> ] list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04/B19>automatic_inout_declaration ::= <B>inout</B> [ <B>automatic</B> ] [ <B>signed</B> ] list_of_port_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04/B19>automatic_reg_declaration ::= <B>reg</B> [ <B>automatic</B> ] [ <B>signed</B> | <B>unsigned</B> ] [range] list_of_regmem_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>automatic_integer_declaration ::= <B>integer</B> [ <B>automatic</B> ] list_of_register_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>automatic_time_declaration ::= <B>time</B> [ <B>automatic</B> ] list_of_register_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>automatic_real_declaration ::= <B>real</B> [ <B>automatic</B> ] list_of_real_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>automatic_realtime_declaration ::= <B>realtime</B> [ <B>automatic</B> ] list_of_real_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B04>automatic_event_declaration ::= <B>event</B> [ <B>automatic</B> ] list_of_event_identifiers <B>;</B> </FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT SIZE=4><B>A.3 Primitive instances </B></FONT></TT>
<BR><TT> </TT>
<BR><TT>gate_instantiation ::= </TT>
<BR><TT> n_input_gatetype [drive_strength] [delay2] n_input_gate_instance { <B>,</B> n_input_gate_instance } <B>;</B> </TT>
<BR><TT> | n_output_gatetype [drive_strength] [delay2] n_output_gate_instance { <B>,</B> n_output_gate_instance } <B>;</B> </TT>
<BR><TT> | enable_gatetype [drive_strength] [delay3] enable_gate_instance { <B>,</B> enable_gate_instance } <B>;</B> </TT>
<BR><TT> | mos_switchtype [delay3] mos_switch_instance { <B>,</B> mos_switch_instance } <B>;</B> </TT>
<BR><TT> | pass_switchtype pass_switch_instance { <B>,</B> pass_switch_instance } <B>;</B> </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | pass_en_switchtype [delay3] pass_en_switch_instance { <B>,</B> pass_en_switch_instance } <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | pass_en_switchtype [delay2] pass_enable_switch_instance { <B>,</B> pass_en_switch_instance } <B>;</B> </FONT></TT>
<BR><TT> | cmos_switchtype [delay3] cmos_switch_instance { <B>,</B> cmos_switch_instance } <B>;</B> </TT>
<BR><TT> | <B>pullup</B> [pullup_strength] pull_gate_instance { <B>,</B> pull_gate_instance } <B>;</B> </TT>
<BR><TT> | <B>pulldown</B> [pulldown_strength] pull_gate_instance { <B>,</B> pull_gate_instance } <B>;</B> </TT>
<BR><TT>n_input_gate_instance ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal { <B>,</B> input_terminal } <B>)</B> </TT>
<BR><TT>n_output_gate_instance ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> { output_terminal } <B>,</B> input_terminal <B>)</B> </TT>
<BR><TT>enable_gate_instance ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal <B>,</B> enable_terminal <B>)</B> </TT>
<BR><TT>mos_switch_instance ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal <B>,</B> enable_terminal <B>)</B> </TT>
<BR><TT>pass_switch_instance ::= [name_of_gate_instance] <B>(</B> inout_terminal <B>,</B> inout_terminal <B>)</B> </TT>
<BR><TT>pass_enable_switch_instance ::= [name_of_gate_instance] <B>(</B> inout_terminal <B>,</B> inout_terminal <B>,</B> enable_terminal <B>)</B> </TT>
<BR><TT>cmos_switch_instance ::= [name_of_gate_instance] <B>(</B> output_terminal <B>,</B> input_terminal <B>,</B> </TT>
<BR><TT> ncontrol_terminal <B>,</B> pcontrol_terminal) </TT>
<BR><TT>pull_gate_instance ::= [name_of_gate_instance] (output_terminal <B>)</B> </TT>
<BR><TT>name_of_gate_instance ::= gate_instance_identifier [range] </TT>
<BR><TT>pullup_strength ::= </TT>
<BR><TT> <B>(</B> strength0 <B>,</B> strength1 <B>)</B> </TT>
<BR><TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>
<BR><TT> | <B>(</B> strength1 <B>)</B> </TT>
<BR><TT>pulldown_strength ::= </TT>
<BR><TT> <B>(</B> strength0 <B>,</B> strength1 <B>)</B> </TT>
<BR><TT> | <B>(</B> strength1 <B>,</B> strength0 <B>)</B> </TT>
<BR><TT> | <B>(</B> strength0 <B>)</B> </TT>
<BR><TT>input_terminal ::= scalar_expression </TT>
<BR><TT>enable_terminal ::= scalar_expression </TT>
<BR><TT>ncontrol_terminal ::= scalar_expression </TT>
<BR><TT>pcontrol_terminal ::= scalar_expression </TT>
<BR><TT>output_terminal ::= <I>terminal</I>_identifier | <I>terminal</I>_identifier [ constant_expression ] </TT>
<BR><TT>inout_terminal ::= <I>terminal</I>_identifier | <I>terminal</I>_identifier [ constant_expression ] </TT>
<BR><TT>n_input_gatetype ::= <B>and</B> | <B>nand</B> | <B>or</B> | <B>nor</B> | <B>xor</B> | <B>xnor</B> </TT>
<BR><TT>n_output_gatetype ::= <B>buf</B> | <B>not</B> </TT>
<BR><TT>enable_gatetype ::= <B>bufif0</B> | <B>bufif1</B> | <B>notif0</B> | <B>notif1</B> </TT>
<BR><TT>mos_switchtype ::= <B>nmos</B> | <B>pmos</B> | <B>rnmos</B> | <B>rpmos</B> </TT>
<BR><TT>pass_switchtype ::= <B>tran</B> | <B>rtran</B> </TT>
<BR><TT>pass_en_switchtype ::= <B>tranif0</B> | <B>tranif1</B> | <B>rtranif1</B> | <B>rtranif0</B> </TT>
<BR><TT>cmos_switchtype ::= <B>cmos</B> | <B>rcmos</B> </TT>
<BR><TT> </TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#0000FF>1995><FONT SIZE=4><B>A.4 Module instantiation </B></FONT></FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01><FONT SIZE=4><B>A.4 Module <B>and</B> generated instantiation </B></FONT></FONT></TT>
<BR><TT> </TT>
<BR><TT>module_instantiation ::= </TT>
<BR><TT> <I>module</I>_identifier [ parameter_value_assignment ] module_instance { <B>,</B> module_instance } <B>;</B> </TT>
<BR><TT><FONT COLOR=#0000FF>1995>parameter_value_assignment ::= <B>#</B> <B>(</B> expression { <B>,</B> expression } <B>)</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06>parameter_value_assignment ::= <B>#</B> <B>(</B> list_of_parameter_assignments <B>)</B> </FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06>list_of_parameter_assignments ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06> ordered_parameter_assignment { <B>,</B> ordered_parameter_assignment } | </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06> named_parameter_assignment { <B>,</B> named_parameter_assignment } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06>ordered_parameter_assignment ::= expression </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B06>named_parameter_assignment ::= . <I>parameter</I>_identifier <B>(</B> [expression] <B>)</B> </FONT></TT>
<BR><TT> </TT>
<BR><TT>module_instance ::= name_of_instance <B>(</B> [list_of_module_connections] <B>)</B> </TT>
<BR><TT>name_of_instance ::= module_instance_identifier <B>[</B> range <B>]</B> </TT>
<BR><TT>list_of_module_connections ::= </TT>
<BR><TT> ordered_port_connection { <B>,</B> ordered_port_connection } </TT>
<BR><TT> | named_port_connection { <B>,</B> named_port_connection } </TT>
<BR><TT>ordered_port_connection ::= [ expression ] </TT>
<BR><TT>named_port_connection ::= .port_identifier <B>(</B> [ expression ] <B>)</B> </TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>genvar_declaration ::= genvar list_of_genvar_identifiers <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>list_of_genvar_identifiers ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> genvar_identifier { <B>,</B> <I>genvar</I>_identifier } </FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>generated_instantiation ::= <B>generate</B> { generate_item } <B>endgenerate</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>generate_item_or_null ::= generate_item | <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>generate_item ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> generate_conditional_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | generate_case_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | generate_loop_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | generate_block </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | non_generated_module_item </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>generate_conditional_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> <B>if</B> <B>(</B> genvar_expression <B>)</B> generate_item_or_null [ else generate_item_or_null ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>generate_case_statement ::= <B>case</B> <B>(</B> genvar_expression <B>)</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>genvar_case_item { genvar_case_item } <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>genvar_case_item ::= genvar_expression { <B>,</B> genvar_expression } <B>:</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> generate_item_or_null | <B>default</B> [ <B>:</B> ] generate_item_or_null </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>generate_loop_statement ::= <B>for</B> <B>(</B> genvar_assignment <B>;</B> genvar_expression <B>;</B> genvar_assignment <B>)</B> generate_item </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>genvar_assignment ::= <I>genvar</I>_identifier <B>=</B> genvar_expression </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>generate_block ::= <B>begin</B> [ <B>:</B> generate_block_identifier ] { generate_item } <B>end</B> </FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT SIZE=4><B>A.5 UDP declaration <B>and</B> instantiation </B></FONT></TT>
<BR><TT> </TT>
<BR><TT>udp_declaration ::= </TT>
<BR><TT> primitive <I>udp</I>_identifier <B>(</B> udp_port_list <B>)</B> </TT>
<BR><TT> udp_port_declaration { udp_port_declaration } </TT>
<BR><TT> udp_body </TT>
<BR><TT> endprimitive </TT>
<BR><TT>udp_port_list ::= output_port_identifier <B>,</B> input_port_identifier { <B>,</B> input_port_identifier } </TT>
<BR><TT>udp_port_declaration ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> output_declaration </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | input_declaration </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | reg_declaration </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> udp_output_declaration </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | udp_input_declaration </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | udp_reg_declaration </FONT></TT>
<BR><TT>udp_body ::= combinational_body | sequential_body </TT>
<BR><TT>combinational_body ::= <B>table</B> combinational_entry { combinational_entry } <B>endtable</B> </TT>
<BR><TT>combinational_entry ::= level_input_list <B>:</B> output_symbol <B>;</B> </TT>
<BR><TT>sequential_body ::= [ udp_initial statement ] <B>table</B> sequential_entry { sequential_entry } <B>endtable</B> </TT>
<BR><TT>udp_initial statement ::= <B>initial</B> udp_output_port_identifier <B>=</B> init_val <B>;</B> </TT>
<BR><TT>init_val ::= <B>1'b0</B> | <B>1'b1</B> | <B>1'bx</B> | <B>1'bX</B> | <B>1'B0</B> | <B>1'B1</B> | <B>1'Bx</B> | <B>1'BX</B> | <B>1</B> | <B>0</B> </TT>
<BR><TT>sequential_entry ::= seq_input_list <B>:</B> current_state <B>:</B> next state <B>;</B> </TT>
<BR><TT>seq_input_list ::= level_input_list | edge_input_list </TT>
<BR><TT>level_input_list ::= level_symbol { level_symbol } </TT>
<BR><TT>edge_input_list ::= { level_symbol } edge_indicator { level_symbol } </TT>
<BR><TT>edge_indicator ::= <B>(</B> level_symbol level_symbol <B>)</B> | edge_symbol </TT>
<BR><TT>current_state ::= level_symbol </TT>
<BR><TT>next state ::= output_symbol | <B>-</B> </TT>
<BR><TT>output_symbol ::= <B>0</B> | <B>1</B> | <B>x</B> | <B>X</B> </TT>
<BR><TT>level_symbol ::= <B>0</B> | <B>1</B> | <B>x</B> | <B>X</B> | <B>?</B> | <B>b</B> | <B>B</B> </TT>
<BR><TT>edge_symbol ::= <B>r</B> | <B>R</B> | <B>f</B> | <B>F</B> | <B>p</B> | <B>P</B> | <B>n</B> | <B>N</B> | * </TT>
<BR><TT> </TT>
<BR><TT>udp_instantiation ::= <I>udp</I>_identifier [ drive_strength ] [ delay2 ] udp_instance { <B>,</B> udp_instance } <B>;</B> </TT>
<BR><TT>udp_instance ::= [ name_of_udp_instance ] <B>(</B> output_port_connection <B>,</B> input_port_connection </TT>
<BR><TT> { <B>,</B> input_port_connection } <B>)</B> </TT>
<BR><TT>name_of_udp_instance ::= udp_instance_identifier <B>[</B> range <B>]</B> </TT>
<BR><TT> </TT>
<BR><TT><FONT SIZE=4><B>A.6 Behavioral statements </B></FONT></TT>
<BR><TT> </TT>
<BR><TT>continuous_assign ::= <B>assign</B> [drive_strength] [delay3] list_of_net_assignments <B>;</B> </TT>
<BR><TT>list_of_net_assignments ::= net_assignment { <B>,</B> net_assignment } </TT>
<BR><TT>net_assignment ::= net_lvalue <B>=</B> expression </TT>
<BR><TT> </TT>
<BR><TT>initial_construct ::= <B>initial</B> statement </TT>
<BR><TT>always_construct ::= <B>always</B> statement </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>always_combinational_construct ::= <B>always</B> @* combinational_statement </FONT></TT>
<BR><TT> </TT>
<BR><TT>statement ::= </TT>
<BR><TT> blocking_assignment <B>;</B> </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | non_blocking assignment <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> | non_blocking_assignment <B>;</B> </FONT></TT>
<BR><TT> | procedural_continuous_assignments <B>;</B> </TT>
<BR><TT> | procedural_timing_control_statement </TT>
<BR><TT> | conditional_statement </TT>
<BR><TT> | case_statement </TT>
<BR><TT> | loop_statement </TT>
<BR><TT> | wait_statement </TT>
<BR><TT> | disable_statement </TT>
<BR><TT> | event_trigger </TT>
<BR><TT> | seq_block </TT>
<BR><TT> | par_block </TT>
<BR><TT> | task_enable </TT>
<BR><TT> | system_task_enable </TT>
<BR><TT> </TT>
<BR><TT>statement_or_null ::= statement | <B>;</B> </TT>
<BR><TT><FONT COLOR=#0000FF>1995>blocking assignment ::= reg_lvalue <B>=</B> [ delay_or_event_control ] expression </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>non-blocking assignment ::= reg_lvalue <B><=</B> [ delay_or_event_control ] expression </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41>blocking_assignment ::= reg_lvalue <B>=</B> [ delay_or_event_control ] expression </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41>non_blocking_assignment ::= reg_lvalue <B><=</B> [ delay_or_event_control ] expression </FONT></TT>
<BR><TT>procedural_continuous_assignments ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>assign</B> reg_assignment <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <B>assign</B> reg_assignment <B>;</B> </FONT></TT>
<BR><TT> | <B>deassign</B> reg_assignment <B>;</B> </TT>
<BR><TT> | <B>force</B> reg_assignment <B>;</B> </TT>
<BR><TT> | <B>force</B> net_assignment <B>;</B> </TT>
<BR><TT> | <B>release</B> reg_lvalue <B>;</B> </TT>
<BR><TT> | <B>release</B> net_lvalue <B>;</B> </TT>
<BR><TT>procedural_timing_control_statement ::= </TT>
<BR><TT> delay_or_event_control statement_or_null </TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> combinational_blocking_assignment <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_non_blocking_assignment <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_procedural_timing_control_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_conditional_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_case_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_loop_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | disable_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_seq_block </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_task_enable </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | combinational_system_task_enable </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_blocking_assignment ::= reg_lvalue <B>=</B> [ delay_control ] expression </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_non_blocking_assignment ::= reg_lvalue <B><=</B> [ delay_control ] expression </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_procedural_timing_control_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> delay_control combinational_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> function_blocking_assignment <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | function_non_blocking_assignment <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | function_conditional_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | function_case_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | function_loop_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | disable_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | combinational_seq_block </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | combinational_system_task_enable </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_blocking_assignment ::= reg_lvalue <B>=</B> expression </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_non_blocking_assignment ::= reg_lvalue <B><=</B> [ delay_control ] expression </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_statement_or_null ::= function_statement | <B>;</B> </FONT></TT>
<BR><TT>delay_or_event_control ::= </TT>
<BR><TT> delay_control </TT>
<BR><TT> | event_control </TT>
<BR><TT> | <B>repeat</B> <B>(</B> expression <B>)</B> event_control </TT>
<BR><TT>delay_control ::= </TT>
<BR><TT> <B>#</B> delay_value </TT>
<BR><TT> | <B>#</B> <B>(</B> mintypmax_expression <B>)</B> </TT>
<BR><TT>event_control ::= </TT>
<BR><TT> <B>@</B> <I>event</I>_identifier </TT>
<BR><TT> | <B>@</B> <B>(</B> event_expression <B>)</B> </TT>
<BR><TT>event_expression ::= </TT>
<BR><TT> expression </TT>
<BR><TT> | <I>event</I>_identifier </TT>
<BR><TT> | <B>posedge</B> expression </TT>
<BR><TT> | <B>negedge</B> expression </TT>
<BR><TT> | event_expression <B>or</B> event_expression </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B07> | event_expression <B>,</B> event_expression </FONT></TT>
<BR><TT>conditional_statement ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>if</B> <B>(</B> expression <B>)</B> statement_or_null [ else statement_or_null ] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <B>if</B> <B>(</B> expression <B>)</B> statement_or_null [ else statement_or_null ] </FONT></TT>
<BR><TT>case_statement ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>case</B> <B>(</B> expression <B>)</B> case_item [ case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <B>case</B> <B>(</B> expression <B>)</B> case_item [ case_item ] <B>endcase</B> </FONT></TT>
<BR><TT> | <B>casez</B> <B>(</B> expression <B>)</B> case_item [ case_item ] <B>endcase</B> </TT>
<BR><TT> | <B>casex</B> <B>(</B> expression <B>)</B> case_item [ case_item ] <B>endcase</B> </TT>
<BR><TT>case_item ::= </TT>
<BR><TT> expression { <B>,</B> expression } <B>:</B> statement_or_null </TT>
<BR><TT> | <B>default</B> [ <B>:</B> ] statement_or_null </TT>
<BR><TT>loop_statement ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | forever statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE10> forever statement </FONT></TT>
<BR><TT> | <B>repeat</B> <B>(</B> expression <B>)</B> statement </TT>
<BR><TT> | <B>while</B> <B>(</B> expression <B>)</B> statement </TT>
<BR><TT> | <B>for</B> <B>(</B> reg_assignment <B>;</B> expression <B>;</B> reg_assignment <B>)</B> statement </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_conditional_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <B>if</B> <B>(</B> expression <B>)</B> combinational_statement_or_null [ else combinational_statement_or_null ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_case_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> <B>case</B> <B>(</B> expression <B>)</B> case_item [ combinational_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>casez</B> <B>(</B> expression <B>)</B> case_item [ combinational_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>casex</B> <B>(</B> expression <B>)</B> case_item [ combinational_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_case_item ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> expression { <B>,</B> expression } <B>:</B> combinational_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>default</B> [ <B>:</B> ] combinational_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_loop_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> forever combinational_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>repeat</B> <B>(</B> expression <B>)</B> combinational_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>while</B> <B>(</B> expression <B>)</B> combinational_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08> | <B>for</B> <B>(</B> reg_assignment <B>;</B> expression <B>;</B> reg_assignment <B>)</B> combinational_statement </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_seq_block ::= <B>begin</B> [ <B>:</B> <I>block</I>_identifier { block_item_declaration } ] { combinational_statement } <B>end</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B08>combinational_task_enable ::= combinational_task_identifier [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_conditional_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <B>if</B> <B>(</B> expression <B>)</B> function_statement_or_null [ else function_statement_or_null ] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_case_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> <B>case</B> <B>(</B> expression <B>)</B> case_item [ function_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>casez</B> <B>(</B> expression <B>)</B> case_item [ function_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>casex</B> <B>(</B> expression <B>)</B> case_item [ function_case_item ] <B>endcase</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_case_item ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> expression { <B>,</B> expression } <B>:</B> function_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>default</B> [ <B>:</B> ] function_statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_loop_statement ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> forever function_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>repeat</B> <B>(</B> expression <B>)</B> function_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>while</B> <B>(</B> expression <B>)</B> function_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | <B>for</B> <B>(</B> reg_assignment <B>;</B> expression <B>;</B> reg_assignment <B>)</B> function_statement </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>function_seq_block ::= <B>begin</B> [ <B>:</B> <I>block</I>_identifier { block_item_declaration } ] { function_statement } <B>end</B> </FONT></TT>
<BR><TT>reg_assignment ::= reg_lvalue <B>=</B> expression </TT>
<BR><TT>wait_statement ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>wait</B> <B>(</B> expression <B>)</B> statement_or_null </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <B>wait</B> <B>(</B> expression <B>)</B> statement_or_null </FONT></TT>
<BR><TT>event_trigger ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | -> <I>event</I>_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> -> <I>event</I>_identifier <B>;</B> </FONT></TT>
<BR><TT>disable_statement ::= </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>disable</B> <I>task</I>_identifier <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> <B>disable</B> <I>task</I>_identifier <B>;</B> </FONT></TT>
<BR><TT> | <B>disable</B> <I>block</I>_identifier <B>;</B> </TT>
<BR><TT>seq_block ::= <B>begin</B> [ <B>:</B> <I>block</I>_identifier { block_item_declaration } ] { statement } <B>end</B> </TT>
<BR><TT>par_block ::= <B>fork</B> [ <B>:</B> <I>block</I>_identifier { block_item_declaration } ] { statement } <B>join</B> </TT>
<BR><TT>task_enable ::= <I>task</I>_identifier [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </TT>
<BR><TT>system_task_enable ::= system_task_name [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] <B>;</B> </TT>
<BR><TT>system_task_name ::= $identifier Note: The $ may <B>not</B> be followed by <B>a</B> space. </TT>
<BR><TT> </TT>
<BR><TT><FONT SIZE=4><B>A.7 Specify section </B></FONT></TT>
<BR><TT> </TT>
<BR><TT>specify_block ::= <B>specify</B> { specify_item } <B>endspecify</B> <B>;</B> </TT>
<BR><TT>specify_item ::= </TT>
<BR><TT> specparam_declaration </TT>
<BR><TT> | path_declaration </TT>
<BR><TT> | system_timing_check </TT>
<BR><TT>specparam_declaration ::= <B>specparam</B> list_of_specparam_assignments <B>;</B> </TT>
<BR><TT>list_of_specparam_assignments ::= specparam_assignment { <B>,</B> specparam_assignment } </TT>
<BR><TT>specparam_assignment ::= </TT>
<BR><TT> <I>specparam</I>_identifier <B>=</B> constant_expression </TT>
<BR><TT> | pulse_control_specparam </TT>
<BR><TT>pulse_control_specparam ::= </TT>
<BR><TT> PATHPULSE$ <B>=</B> <B>(</B> reject_limit_value [ <B>,</B> error_limit_value ] <B>)</B> </TT>
<BR><TT> | PATHPULSE$specify_input_terminal_descriptor$specify_output_terminal_descriptor </TT>
<BR><TT> = <B>(</B> reject_limit_value [ <B>,</B> error_limit_value ] <B>)</B> </TT>
<BR><TT>limit_value ::= constant_mintypmax_expression </TT>
<BR><TT>path_declaration ::= </TT>
<BR><TT> simple_path_declaration <B>;</B> </TT>
<BR><TT> | edge_sensitive_path_declaration <B>;</B> </TT>
<BR><TT><FONT COLOR=#0000FF>1995> | state-dependent_path_declaration <B>;</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE41> | state_dependent_path_declaration <B>;</B> </FONT></TT>
<BR><TT>simple_path_declaration ::= </TT>
<BR><TT> parallel_path_description <B>=</B> path_delay_value </TT>
<BR><TT> | full_path_description <B>=</B> path_delay_value </TT>
<BR><TT>parallel_path_description ::= </TT>
<BR><TT> ( specify_input_terminal_descriptor [ polarity_operator ] => specify_output_terminal_descriptor <B>)</B> </TT>
<BR><TT>full_path_description </TT>
<BR><TT> ( list_of_path_inputs [ polarity_operator ] *> list_of_path_outputs <B>)</B> </TT>
<BR><TT>list_of_path_inputs ::= </TT>
<BR><TT> ( specify_input_terminal_descriptor { <B>,</B> specify_input_terminal_descriptor } </TT>
<BR><TT>list_of_path_outputs ::= </TT>
<BR><TT> ( specify_output_terminal_descriptor { <B>,</B> specify_output_terminal_descriptor } </TT>
<BR><TT>specify_input_terminal_descriptor ::= </TT>
<BR><TT> <I>input</I>_identifier </TT>
<BR><TT> | <I>input</I>_identifier [ constant_expression ] </TT>
<BR><TT> | <I>input</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>
<BR><TT>specify_output_terminal_descriptor ::= </TT>
<BR><TT> <I>output</I>_identifier </TT>
<BR><TT> | <I>output</I>_identifier [ constant_expression ] </TT>
<BR><TT> | <I>output</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>
<BR><TT>input_identifier ::= input_port_identifier | inout_port_identifier </TT>
<BR><TT>output_identifier ::= output_port_identifier | inout_port_identifier </TT>
<BR><TT>polarity_operator ::= <B>+</B> | <B>-</B> </TT>
<BR><TT>path_delay_value ::= </TT>
<BR><TT> list_of_path_delay_expressions </TT>
<BR><TT> | <B>(</B> list_of_path_delay_expressions <B>)</B> </TT>
<BR><TT>list_of_path_delay_expressions ::= </TT>
<BR><TT> t_path_delay_expression </TT>
<BR><TT> | trise_path_delay_expression <B>,</B> tfall_path_delay_expression </TT>
<BR><TT> | trise_path_delay_expression <B>,</B> tfall_path_delay_expression <B>,</B> tz_path_delay_expression </TT>
<BR><TT> | t01_path_delay_expression <B>,</B> t10_path_delay_expression <B>,</B> t0z_path_delay_expression <B>,</B> </TT>
<BR><TT> tz1_path_delay_expression <B>,</B> t1z_path_delay_expression <B>,</B> tz0_path_delay_expression </TT>
<BR><TT> | t01_path_delay_expression <B>,</B> t10_path_delay_expression <B>,</B> t0z_path_delay_expression <B>,</B> </TT>
<BR><TT> tz1_path_delay_expression <B>,</B> t1z_path_delay_expression <B>,</B> tz0_path_delay_expression </TT>
<BR><TT> t0x_path_delay_expression <B>,</B> tx1_path_delay_expression <B>,</B> t1x_path_delay_expression <B>,</B> </TT>
<BR><TT> tx0_path_delay_expression <B>,</B> txz_path_delay_expression <B>,</B> tzx_path_delay_expression </TT>
<BR><TT>path_delay_expression ::= constant_mintypmax_expression </TT>
<BR><TT>edge_sensitive_path_declaration ::= </TT>
<BR><TT> parallel_edge_sensitive_path_description <B>=</B> path_delay_value </TT>
<BR><TT> | full_edge_sensitive_path_description <B>=</B> path_delay_value </TT>
<BR><TT>parallel_edge_sensitive_path_description ::= </TT>
<BR><TT> <B>(</B> [ <I>edge</I>_identifier ] specify_input_terminal_descriptor => </TT>
<BR><TT><FONT COLOR=#0000FF>1995> specify_output_terminal_descriptor [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> ) </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> specify_output_terminal_descriptor [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> </FONT></TT>
<BR><TT>full_edge_sensitive_path_description ::= </TT>
<BR><TT> <B>(</B> [ <I>edge</I>_identifier ] list_of_path_inputs *> </TT>
<BR><TT><FONT COLOR=#0000FF>1995> list_of_path_inputs [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> ) </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> list_of_path_inputs [ polarity_operator ] <B>:</B> data_source_expression <B>)</B> </FONT></TT>
<BR><TT>data_source_expression ::= expression </TT>
<BR><TT>edge_identifier ::= <B>posedge</B> | <B>negedge</B> </TT>
<BR><TT>state_dependent_path_declaration ::= </TT>
<BR><TT> <B>if</B> <B>(</B> conditional_expression <B>)</B> simple_path_declaration </TT>
<BR><TT> | <B>if</B> <B>(</B> conditional_expression <B>)</B> edge_sensitive_path_declaration </TT>
<BR><TT> | <B>ifnone</B> simple_path_declaration </TT>
<BR><TT> </TT>
<BR><TT>system_timing_check ::= </TT>
<BR><TT> $setup <B>(</B> timing_check_event <B>,</B> timing_check_event <B>,</B> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> </TT>
<BR><TT> | $hold <B>(</B> timing_check_event <B>,</B> timing_check_event <B>,</B> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> </TT>
<BR><TT> | $period <B>(</B> controlled_timing_check_event <B>,</B> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> </TT>
<BR><TT> | $width <B>(</B> controlled_timing_check_event <B>,</B> timing_check_limit <B>,</B> </TT>
<BR><TT> constant_expression [ <B>,</B> notify_register ] <B>)</B> </TT>
<BR><TT> | $skew <B>(</B> timing_check_event <B>,</B> timing_check_event <B>,</B> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> </TT>
<BR><TT> | $recovery <B>(</B> controlled_timing_check_event <B>,</B> timing_check_event <B>,</B> </TT>
<BR><TT> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> </TT>
<BR><TT> | $setuphold <B>(</B> timing_check_event <B>,</B> timing_check_event <B>,</B> timing_check_limit <B>,</B> </TT>
<BR><TT> timing_check_limit [ <B>,</B> notify_register ] <B>)</B> </TT>
<BR><TT><FONT COLOR=#800080>1998 BE02> | $nochange <B>(</B> reference_event <B>,</B> data_event <B>,</B> start_edge_offset <B>,</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE02> end_edge_offset [ <B>,</B> notify_register ] <B>)</B> </FONT></TT>
<BR><TT>timing_check_event ::= </TT>
<BR><TT> [timing_check_event_control] specify_terminal_descriptor [ &&& timing_check_condition ] </TT>
<BR><TT>specify_terminal_descriptor ::= </TT>
<BR><TT> specify_input_terminal_descriptor </TT>
<BR><TT> | specify_output_terminal_descriptor </TT>
<BR><TT>controlled_timing_check_event ::= </TT>
<BR><TT> timing_check_event_control specify_terminal_descriptor [ &&& timing_check_condition ] </TT>
<BR><TT>timing_check_event_control ::= </TT>
<BR><TT> <B>posedge</B> </TT>
<BR><TT> | <B>negedge</B> </TT>
<BR><TT> | edge_control_specifier </TT>
<BR><TT>edge_control_specifier ::= <B>edge</B> [ edge_descriptor [ <B>,</B> edge_descriptor ] ] </TT>
<BR><TT>edge_descriptor ::= </TT>
<BR><TT> <B>01</B> </TT>
<BR><TT> | <B>10</B> </TT>
<BR><TT> | <B>0x</B> </TT>
<BR><TT> | <B>x1</B> </TT>
<BR><TT> | <B>1x</B> </TT>
<BR><TT> | <B>x0</B> </TT>
<BR><TT>timing_check_condition ::= </TT>
<BR><TT> scalar_timing_check_condition </TT>
<BR><TT> | <B>(</B> scalar_timing_check_condition <B>)</B> </TT>
<BR><TT>scalar_timing_check_condition ::= </TT>
<BR><TT> expression </TT>
<BR><TT> | <B>~</B> expression </TT>
<BR><TT> | expression <B>==</B> scalar_constant </TT>
<BR><TT> | expression <B>===</B> scalar_constant </TT>
<BR><TT> | expression <B>!=</B> scalar_constant </TT>
<BR><TT> | expression <B>!==</B> scalar_constant </TT>
<BR><TT>timing_check_limit ::= expression </TT>
<BR><TT>scalar_constant ::= </TT>
<BR><TT> <B>1'b0</B> | <B>1'b1</B> | <B>1'B0</B> | <B>1'B1</B> | <B>'b0</B> | <B>'b1</B> | <B>'B0</B> | <B>'B1</B> | <B>1</B> | <B>0</B> </TT>
<BR><TT>notify_register ::= <I>register</I>_identifier </TT>
<BR><TT> </TT>
<BR><TT><FONT SIZE=4><B>A.8 Expressions </B></FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>genvar_expression ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> genvar_primary </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | unary_operator genvar_primary </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | genvar_expression binary_operator genvar_expression </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | genvar_expression <B>?</B> genvar_expression <B>:</B> genvar_expression </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | string </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>genvar_primary ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> constant_primary </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <I>genvar</I>_identifier </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <I>genvar</I>_identifier [ genvar_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | <I>genvar</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | genvar_concatenation | genvar_multiple_concatenation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01> | genvar_function_call </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B01>genvar_function_call ::= genvar_function_identifier <B>(</B> genvar_expression { <B>,</B> genvar_expression } <B>)</B> </FONT></TT>
<BR><TT> </TT>
<BR><TT>net_lvalue ::= </TT>
<BR><TT> <I>net</I>_identifier </TT>
<BR><TT> | <I>net</I>_identifier [ expression ] </TT>
<BR><TT> | <I>net</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>
<BR><TT> | net_concatenation </TT>
<BR><TT>reg_lvalue ::= </TT>
<BR><TT> <I>reg</I>_identifier </TT>
<BR><TT> | <I>reg</I>_identifier [ expression ] </TT>
<BR><TT> | <I>reg</I>_identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </TT>
<BR><TT> | reg_concatenation </TT>
<BR><TT>constant_expression ::= </TT>
<BR><TT> constant_primary </TT>
<BR><TT> | unary_operator constant_primary </TT>
<BR><TT> | constant_expression binary_operator constant_expression </TT>
<BR><TT> | constant_expression <B>?</B> constant_expression <B>:</B> constant_expression </TT>
<BR><TT> | string </TT>
<BR><TT>constant_primary ::= </TT>
<BR><TT> number </TT>
<BR><TT> | <I>parameter</I>_identifier </TT>
<BR><TT> | constant_concatenation </TT>
<BR><TT> | constant_multiple_concatenation </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B21??> | constant_function_call </FONT></TT>
<BR><TT>constant_mintypmax_expression ::= </TT>
<BR><TT> constant_expression </TT>
<BR><TT> | constant_expression <B>:</B> constant_expression <B>:</B> constant_expression </TT>
<BR><TT>mintypmax_expression ::= </TT>
<BR><TT> expression </TT>
<BR><TT> | expression <B>:</B> expression <B>:</B> expression </TT>
<BR><TT>expression ::= </TT>
<BR><TT> primary </TT>
<BR><TT> | unary_operator primary </TT>
<BR><TT> | expression binary_operator expression </TT>
<BR><TT> | expression <B>?</B> expression <B>:</B> expression </TT>
<BR><TT> | string </TT>
<BR><TT>unary_operator ::= </TT>
<BR><TT> <B>+</B> | <B>-</B> | <B>!</B> | <B>~</B> | <B>&</B> | <B>~&</B> | <B>|</B> | <B>~|</B> | <B>^</B> | <B>~^</B> | <B>^~</B> </TT>
<BR><TT><FONT COLOR=#0000FF>1995>binary_operator ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> <B>+</B> | <B>-</B> | * | / | <B>%</B> | <B>==</B> | <B>!=</B> | <B>===</B> | <B>!==</B> | <B>&&</B> | <B>||</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B><</B> | <B><=</B> | <B>></B> | <B>>=</B> | <B>&</B> | <B>|</B> | <B>^</B> | <B>^~</B> | <B>~^</B> | <B>>></B> | <B><<</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19>binary_operator ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19/B27> <B>+</B> | <B>-</B> | * | / | <B>%</B> | <B>==</B> | <B>!=</B> | <B>===</B> | <B>!==</B> | <B>&&</B> | <B>||</B> | <B>**</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19> | <B><</B> | <B><=</B> | <B>></B> | <B>>=</B> | <B>&</B> | <B>|</B> | <B>^</B> | <B>^~</B> | <B>~^</B> | <B>>></B> | <B><<</B> | <B>>>></B> | <B><<<</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>primary ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> number </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | identifier </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | identifier [ expression ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | concatenation </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | multiple_concatenation </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | function_call </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | <B>(</B> mintypmax_expression <B>)</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02>primary ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> number </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | identifier </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | identifier [ expression ] { [ expression ] } </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | identifier [ expression ] { [ expression ] } [ [ msb_constant_expression <B>:</B> lsb_constant_expression ] ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | identifier [ msb_constant_expression <B>:</B> lsb_constant_expression ] </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | concatenation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | multiple_concatenation </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | function_call </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | constant_function_call </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B02> | <B>(</B> mintypmax_expression <B>)</B> </FONT></TT>
<BR><TT>number ::= </TT>
<BR><TT> decimal_number </TT>
<BR><TT> | octal_number </TT>
<BR><TT> | binary_number </TT>
<BR><TT> | hex_number </TT>
<BR><TT> | real_number </TT>
<BR><TT><FONT COLOR=#0000FF>1995>real_number ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> [ sign ] unsigned_number . unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | [ sign ] unsigned_number [ . unsigned_number ] <B>e</B> [ sign ] unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | [ sign ] unsigned_number [ . unsigned_number ] <B>e</B> [ sign ] unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08/BE35>real_number<SUB>1</SUB> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08/BE35> unsigned_number . unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08/BE35> | unsigned_number [ . unsigned_number ] <B>e</B> [ sign ] unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08/BE35> | unsigned_number [ . unsigned_number ] <B>E</B> [ sign ] unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>decimal_number ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> [ sign ] unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | [ size ] decimal_base unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>binary_number ::= [ size ] binary_base binary_digit { <B>_</B> | binary_digit } </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>octal_number ::= [ size ] octal_base octal_digit { <B>_</B> | octal_digit } </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>hex_number ::= [ size ] hex_base hex_digit { <B>_</B> | hex_digit } </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>decimal_number ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08/BE35> unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08> | [ size ] decimal_base unsigned_number </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | [ size ] decimal_base xz_digit { <B>_</B> | xz_digit } </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>binary_number ::= [ size ] binary_base binary_value </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>octal_number ::= [ size ] octal_base octal_value </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>hex_number ::= [ size ] hex_base hex_value </FONT></TT>
<BR><TT>sign ::= <B>+</B> | <B>-</B> </TT>
<BR><TT>size ::= unsigned_number </TT>
<BR><TT><FONT COLOR=#0000FF>1995>unsigned_number ::= decimal_digit { <B>_</B> | decimal_digit } </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>unsigned_number<SUB>1</SUB> ::= decimal_digit { <B>_</B> | decimal_digit } </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>binary_value<SUB>1</SUB>::= binary_digit { <B>_</B> | binary_digit } </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>octal_value<SUB>1</SUB>::= octal_digit { <B>_</B> | octal_digit } </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>hex_value<SUB>1</SUB>::= hex_digit { <B>_</B> | hex_digit } </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>decimal_base ::= <B>'d</B> | <B>'D</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>binary_base ::= <B>'b</B> | <B>'B</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>octal_base ::= <B>'o</B> | <B>'O</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>hex_base ::= <B>'h</B> | <B>'H</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>decimal_base<SUB>1</SUB>::= <B>'d</B> | <B>'D</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>binary_base<SUB>1</SUB>::= <B>'b</B> | <B>'B</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>octal_base<SUB>1</SUB>::= <B>'o</B> | <B>'O</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>hex_base<SUB>1</SUB>::= <B>'h</B> | <B>'H</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19>decimal_base<SUB>1</SUB> ::= <B>'</B>[<B>s</B>|<B>S</B>]<B>d</B> | <B>'</B>[<B>s</B>|<B>S</B>]<B>D</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19>binary_base<SUB>1</SUB> ::= <B>'</B>[<B>s</B>|<B>S</B>]<B>b</B> | <B>'</B>[<B>s</B>|<B>S</B>]<B>B</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19>octal_base<SUB>1</SUB> ::= <B>'</B>[<B>s</B>|<B>S</B>]<B>o</B> | <B>'</B>[<B>s</B>|<B>S</B>]<B>O</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B19>hex_base<SUB>1</SUB> ::= <B>'</B>[<B>s</B>|<B>S</B>]<B>h</B> | <B>'</B>[<B>s</B>|<B>S</B>]<B>H</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>decimal_digit ::= <B>0</B> | <B>1</B> | <B>2</B> | <B>3</B> | <B>4</B> | <B>5</B> | <B>6</B> | <B>7</B> | <B>8</B> | <B>9</B> | <B>0</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>binary_digit ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> | <B>0</B> | <B>1</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>octal_digit ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> | <B>0</B> | <B>1</B> | <B>2</B> | <B>3</B> | <B>4</B> | <B>5</B> | <B>6</B> | <B>7</B> </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>hex_digit ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> | <B>0</B> | <B>1</B> | <B>2</B> | <B>3</B> | <B>4</B> | <B>5</B> | <B>6</B> | <B>7</B> | <B>8</B> | <B>9</B> | <B>a</B> | <B>b</B> | <B>c</B> | <B>d</B> | <B>e</B> | <B>f</B> | <B>A</B> | <B>B</B> | <B>C</B> | <B>D</B> | <B>E</B> | <B>F</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>decimal_digit ::= <B>0</B> | <B>1</B> | <B>2</B> | <B>3</B> | <B>4</B> | <B>5</B> | <B>6</B> | <B>7</B> | <B>8</B> | <B>9</B> | <B>_</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE34>binary_digit ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> | <B>?</B> | <B>0</B> | <B>1</B> | <B>_</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE34>octal_digit ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> | <B>?</B> | <B>0</B> | <B>1</B> | <B>2</B> | <B>3</B> | <B>4</B> | <B>5</B> | <B>6</B> | <B>7</B> | <B>_</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE34>hex_digit ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> | <B>?</B> | <B>0</B> | <B>1</B> | <B>2</B> | <B>3</B> | <B>4</B> | <B>5</B> | <B>6</B> | <B>7</B> | <B>8</B> | <B>9</B> | <B>a</B> | <B>b</B> | <B>c</B> | <B>d</B> | <B>e</B> | <B>f</B> | <B>A</B> | <B>B</B> | <B>C</B> | <B>D</B> | <B>E</B> | <B>F</B> | <B>_</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??>xz_digit ::= <B>x</B> | <B>X</B> | <B>z</B> | <B>Z</B> | <B>?</B> </FONT></TT>
<BR><TT> </TT>
<BR><TT>concatenation ::= { expression { <B>,</B> expression } } </TT>
<BR><TT>multiple_concatenation ::= { expression { <B>,</B> expression { <B>,</B> expression } } } </TT>
<BR><TT>function_call ::= </TT>
<BR><TT> <I>function</I>_identifier <B>(</B> expression { <B>,</B> expression } <B>)</B> </TT>
<BR><TT> | name_of_system_function [ <B>(</B> expression { <B>,</B> expression } <B>)</B> ] </TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??>constant_function_call ::= </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??> <I>function</I>_identifier <B>(</B> constant_expression { <B>,</B> constant_expression } <B>)</B> </FONT></TT>
<BR><TT><FONT COLOR=#FF0000>1998 B??> | name_of_system_function [ <B>(</B> constant_expression { <B>,</B> constant_expression } <B>)</B> ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>name_of_system_function ::= $identifier </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE08>name_of_system_function<SUB>2</SUB> ::= $identifier </FONT></TT>
<BR><TT>string ::= " { Any_ASCII_Characters_except_new_line } " </TT>
<BR><TT> </TT>
<BR><TT>NOTES </TT>
<BR><TT>1- Embedded spaces are illegal </TT>
<BR><TT>2- The $ in name_of_system_function may <B>not</B> be followed by <B>a</B> space </TT>
<BR><TT> </TT>
<BR><TT><FONT SIZE=4><B>A.9 General </B></FONT></TT>
<BR><TT> </TT>
<BR><TT>comment ::= </TT>
<BR><TT> short_comment </TT>
<BR><TT> | long_comment </TT>
<BR><TT>short_comment ::= // comment_text \n </TT>
<BR><TT>long_comment ::= /* comment_text */ </TT>
<BR><TT>comment_text ::= { Any_ASCII_character } </TT>
<BR><TT><FONT COLOR=#0000FF>1995>identifier ::= IDENTIFIER [ { .IDENTIFIER } ] </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>IDENTIFIER ::= </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> simple_identifier </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995> | escaped_identifier </FONT></TT>
<BR><TT><FONT COLOR=#0000FF>1995>simple_identifier ::= [a-zA-Z][a-zA-Z0-9_$] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>identifier ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> simple_identifier </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | escaped_identifier </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE01>simple_identifier<SUB>3</SUB> ::= [a-zA-Z_] [ { [a-zA-Z0-9_$] } ] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE01>arrayed_reference<SUB>3</SUB> ::= [a-zA-Z_] [ { [a-zA-Z0-9_$] } ] [ { [0-9_] } ] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>hierarchical_identifier ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> simple_hierarchical_identifier </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> | escaped_hierarchical_identifier </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>simple_hierarchical_identifier<SUB>3</SUB> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> simple_hierarchical_branch [ .escaped_identifier ] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>escaped_hierarchical_identifier<SUB>4</SUB> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> escaped_hierarchical_branch [ { .simple_hierarchical_branch | .escaped_hierarchical_branch } ] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>simple_hierarchical_branch<SUB>3</SUB> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> simple_identifier [ [ unsigned_number ] ] [ { .simple_identifier [ [ unsigned_number ] ] } ] </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>escaped_hierarchical_branch<SUB>4</SUB> ::= </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> escaped_identifier [ [ unsigned_number ] ] [ { .escaped_identifier [ [ unsigned_number ] ] } ] </FONT></TT>
<BR><TT>escaped_identifier ::= <B>\</B> {Any_ASCII_character_except_white_space} white_space </TT>
<BR><TT><FONT COLOR=#0000FF>1995>white_space ::= space | tab | newline </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>white_space ::= space | tab | newline | eof<SUB>5</SUB> </FONT></TT>
<BR><TT> </TT>
<BR><TT><FONT COLOR=#0000FF>1995>NOTE <B>-</B> The period in identifier may <B>not</B> be preceded <B>or</B> followed by <B>a</B> space </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>NOTE </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>3 <B>-</B> <B>A</B> simple_identifier <B>and</B> arrayed_reference shall have at least one character <B>and</B> no spaces </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>3 <B>-</B> The period in simple_hierarchical_identifier <B>and</B> simple_hierarchical_branch shall <B>not</B> </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> be preceded <B>or</B> followed by white_space </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>4 <B>-</B> The period in escaped_hierarchical_identifier <B>and</B> escaped_hierarchical_branch shall </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??> be preceded by white_space but shall <B>not</B> be followed by white_space </FONT></TT>
<BR><TT><FONT COLOR=#800080>1998 BE??>5 <B>-</B> End of file </FONT></TT>
<BR><TT> </TT>
</BODY>
</HTML>
X-Lines: 0
Content-Type: text/plain; charset="us-ascii"
Content-Length: 0
X-Status: $$$$
X-UID: 0000000381
Status: RO
This archive was generated by hypermail 2.1.4
: Mon Jul 08 2002 - 12:52:48 PDT
and
sponsored by Boyd Technology, Inc.