[][src]Module moore_vhdl_syntax::parser::rules

This module implements a first stage recursive descent parser for VHDL. It can process a stream of input tokens into the coarse, generalized abstract syntax tree defined in [ast]. The grammar productions/rules outlined in the VHDL standard are collapsed into more general rules as outlined in the following table.

VHDL Standard Generalized to
aggregate paren_expr
array_constraint name
attribute_declaration attr_decl
attribute_name name
attribute_specification attr_decl
block_specification name
configuration_item decl_item
constraint primary_expr
enumeration_type_definition paren_expr
external_name ignored
function_call name
generate_specification expr
generic_clause generic_clause
generic_map_aspect map_aspect
group_declaration group_decl
group_template_declaration group_decl
indexed_name name
interface_subprogram_declaration subprog_spec
name name
name/character_literal primary_name
name/operator_symbol primary_name
name/simple_name primary_name
port_clause port_clause
port_map_aspect map_aspect
range_constraint name
record_constraint name, paren_expr
resolution_indication primary_expr
selected_name name
slice_name name
subprogram_body subprog_spec
subprogram_declaration subprog_spec
subprogram_instantiation_declaration subprog_spec
subtype_indication name, primary_expr
target primary_expr
time_expression expr
type_mark name

Structs

Recovered
Reported

Enums

ExprPrec

The precedence of an expression.

Traits

Parser

Functions

parse_alias_decl

Parse an alias declaration. See IEEE 1076-2008 section 6.6.

parse_arch_body

Parse an architecture body. See IEEE 1076-2008 section 3.3.

parse_assert_stmt

Parse an assertion statement. See IEEE 1076-2008 section 10.3.

parse_assign_dst_tail
parse_assign_tail

Parse the tail of an assign statement. This function assumes that the name of the signal to be assigned has already been parsed. See IEEE 1076-2008 section 10.5.

parse_attr_decl

Parse an attribute declaration or specification. See IEEE 1076-2008 sections 6.7 and 7.2.

parse_binding_ind

Parse a binding indication. See IEEE 1076-2008 section 7.3.2.1. The trailing semicolon is required only if at least one of the aspect has been parsed.

parse_block_comp_config

Parse a block or component configuration. See IEEE 1076-2008 sections 3.4.2 and 3.4.3.

parse_block_comp_decl_item

Parse a block or component configuration declarative item.

parse_block_comp_spec

Parse a block or component specification. See IEEE 1067-2008 section 7.3.1.

parse_block_stmt

Parse a block statement. See IEEE 1076-2008 section 11.2.

parse_case_generate_stmt

Parse a generate case statement. See IEEE 1076-2008 section 11.8.

parse_case_stmt

Parse a case statement. See IEEE 1076-2008 section 10.9.

parse_component_decl

Parse a component declaration. See IEEE 1076-2008 section 6.8.

parse_cond_waves

Parse a list of conditional waveforms. See IEEE 1076-2008 section 10.5.

parse_config_decl

Parse a configuration declaration. See IEEE 1076-2008 section 3.4.

parse_config_spec

Parse a configuration specification. See IEEE 1076-2008 section 7.3.1.

parse_context_decl

Parse a context declaration. IEEE 1076-2008 section 13.3.

parse_context_ref
parse_design_file

Parse an entire design file. IEEE 1076-2008 section 13.1.

parse_design_unit

Parse a single design unit. IEEE 1076-2008 section 13.1.

parse_discon_spec

Parse a disconnection specification. See IEEE 1076-2008 section 7.4.

parse_entity_class

Parse an entity class. See IEEE 1076-2008 section 7.2.

parse_entity_decl

Parse an entity declaration. See IEEE 1076-2008 section 3.2.

parse_expr
parse_expr_prec

Parse an expression with a precedence higher than prec.

parse_expr_suffix

Parse an expression suffix. Given an already parsed expression and its precedence, try to parse additional tokens that extend the already parsed expression. This is currently limited to binary operations.

parse_for_generate_stmt

Parse a generate for statement. See IEEE 1076-2008 section 11.8.

parse_generate_body

Parse a generate body. See IEEE 1076-2008 section 11.8.

parse_group_decl

Parse a group declaration or group template declaration. See IEEE 1076-2008 sections 6.9 and 6.10.

parse_if_generate_stmt

Parse a generate if statement. See IEEE 1076-2008 section 11.8.

parse_if_stmt

Parse an if statement. See IEEE 1076-2008 section 10.8.

parse_inst_or_call_tail

Parse the tail of an instantiation or procedure call statement. See IEEE 1076-2008 sections 10.7, 11.4, and 11.7.

parse_intf_decl

Parse an interface declaration. These are generally part of an interface list as they appear in generic and port clauses within for example entity declarations. See IEEE 1076-2008 section 6.5.1.

parse_library_clause

Parse a library clause. IEEE 1076-2008 section 13.2.

parse_loop_stmt

Parse a loop statement. See IEEE 1076-2008 section 10.10.

parse_name

Parse a name. IEEE 1076-2008 section 8.

parse_name_suffix

Parse the suffix to a name. IEEE 1076-2008 section 8.

parse_nexit_stmt

Parse a next or exit statement. See IEEE 1076-2008 sections 10.11 and 10.12.

parse_null_stmt

Parse a null statement. See IEEE 1076-2008 section 10.14.

parse_object_decl

Parse a constant, signal, variable, or file declaration. See IEEE 1076-2008 section 6.4.2.

parse_package_body

Parse a package body. See IEEE 1076-2008 section 4.8.

parse_package_decl

Parse a package declaration. See IEEE 1076-2008 section 4.7.

parse_package_inst

Parse a package instantiation declaration. See IEEE 1076-2008 section 4.9.

parse_paren_elem_vec
parse_paren_expr

Try to parse a parenthesized expression. This is a combination of a variety of rules from the VHDL grammar. Most notably, it combines the following:

parse_primary_expr
parse_proc_stmt

Parse a process statement. See IEEE 1076-2008 section 11.3.

parse_report_stmt

Parse a report statement. See IEEE 1076-2008 section 10.4.

parse_return_stmt

Parse a return statement. See IEEE 1076-2008 section 10.13.

parse_select_assign

Parse a select assign statement. See IEEE 1076-2008 section 10.5.

parse_selected_waves

Parse a list of selected waveforms. See IEEE 1076-2008 section 10.5.

parse_signature
parse_stmt

Parse a sequential or concurrent statement.

parse_subprog_decl_item

Parse a subprogram declarative item, which is either a subprogram declaration, body, or instantiation. See IEEE 1076-2008 section 4.2.

parse_subprog_spec

Parse a subprogram specification. This covers the initial part of a subprogram declaration, body, instantiation, or interface declaration. See IEEE 1076-2008 sections 4.2 and 6.5.4. Note that not all combinations of keywords and qualifiers that this parser accepts are actually valid.

parse_subtype_decl

Parse a subtype declaration. See IEEE 1076-2008 section 6.3.

parse_subtype_ind

Parse a subtype indication. See IEEE 1076-2008 section 6.3.

parse_type_decl

Parse a type declaration. See IEEE 1076-2008 section 6.2.

parse_use_clause

Parse a use clause. IEEE 1076-2008 section 12.4.

parse_vunit_binding_ind
parse_wait_stmt

Parse a wait statement. See IEEE 1076-2008 section 10.2.

parse_wave

Parse a waveform. See IEEE 1076-2008 section 10.5.

try_context_item

Parse a context item. IEEE 1076-2008 section 13.4.

try_decl_item

Try to parse a declarative item. See IEEE 1076-2008 section 3.2.3.

try_delay_mech

Try to parse a delay mechanism.

try_force_mode
try_generic_clause

Try to parse a generic clause. See IEEE 1076-2008 section 6.5.6.2.

try_label

Parse an optional label, which basically is just an identifier followed by a colon. This is interesting for statement parsing. See IEEE 1076-2008 section 10.

try_map_aspect

Try to parse a generic or port map aspect. See IEEE 1076-2008 sections 6.5.7.2 and 6.5.7.3.

try_name

Try to parse a name. IEEE 1076-2008 section 8.

try_name_or_qualified_primary_expr
try_paren_expr
try_port_clause

Try to parse a port clause. See IEEE 1076-2008 section 6.5.6.3.

try_primary_name

Try to parse a primary name. IEEE 1076-2008 section 8.

Type Definitions

RecoveredResult
ReportedResult