📄 parser.pm
字号:
expression_rule reserved_word_select name_or_aggregate '<=' reserved_word_guarded(?) delay_mechanism(?) waveform_when_choices_comma_waveform_when_choices ';'waveform_when_choices_comma_waveform_when_choices : waveform_when_choices comma_waveform_when_choices(s?)comma_waveform_when_choices : ',' waveform_when_choiceswaveform_when_choices : waveform_rule reserved_word_when choices_pipe_choices conditional_signal_assignment : name_or_aggregate '<=' reserved_word_guarded(?) delay_mechanism(?) waveform_rule when_boolean_expression_else_waveform_rule(s?) ';' name_or_aggregate : name | aggregatewhen_boolean_expression_else_waveform_rule : reserved_word_when boolean_expression reserved_word_else waveform_rulecomponent_instantiation_statement : instantiation_label ':' entity_configuration_component generic_map_section(?) port_map_section(?) ';' | <error> entity_configuration_component : reserved_word_entity_and_entity_name_arch_name_in_parens | reserved_word_configuration_and_configuration_name | reserved_word_component_and_component_name reserved_word_entity_and_entity_name_arch_name_in_parens : reserved_word_entity entity_name architecture_identifier_in_parens(?) reserved_word_configuration_and_configuration_name : reserved_word_configuration configuration_name reserved_word_component_and_component_name : reserved_word_component(?) component_name architecture_identifier_in_parens : '(' architecture_identifier ')' generate_statement : generate_label ':' for_identifier_in_range_or_if_boolean_expression reserved_word_generate generate_block_declarative_item_and_begin(?) concurrent_statement(s?) reserved_word_end reserved_word_generate generate_label(?) ';'for_identifier_in_range_or_if_boolean_expression : for_identifier_in_range | if_boolean_expressionfor_identifier_in_range : reserved_word_for identifier reserved_word_in discrete_rangeif_boolean_expression : reserved_word_if boolean_expressiongenerate_block_declarative_item_and_begin : block_declarative_item(s?) reserved_word_begin########################################################################################################sequential_statement : wait_statement | assertion_statement | report_statement | signal_assignment_statement | variable_assignment_statement | procedure_call_statement | if_statement | case_statement | loop_statement | next_statement | exit_statement | return_statement | null_statement | <error>wait_statement : label_followed_by_colon(?) reserved_word_wait on_list_of_signal(?) reserved_word_until_and_boolean_expression(?) reserved_word_for_and_time_expression(?) ';'reserved_word_until_and_boolean_expression : reserved_word_until boolean_expressionreserved_word_for_and_time_expression : reserved_word_for time_expressionon_list_of_signal : reserved_word_on signal_name_comma_signal_nameassertion_statement : label_followed_by_colon(?) reserved_word_assert boolean_expression reserved_word_report_and_expression_rule(?) reserved_word_severity_and_expression_rule(?) ';'reserved_word_report_and_expression_rule : reserved_word_report expression_rulereserved_word_severity_and_expression_rule : reserved_word_severity expression_rulereport_statement : label_followed_by_colon(?) reserved_word_report_and_expression_rule reserved_word_severity_and_expression_rule(?) ';'signal_assignment_statement : label_followed_by_colon(?) name_or_aggregate '<=' delay_mechanism(?) waveform_rule ';'delay_mechanism : reserved_word_transport | inertial_with_optional_reject_timeinertial_with_optional_reject_time : reserved_word_reject_and_time_expression(?) reserved_word_inertialreserved_word_reject_and_time_expression : reserved_word_reject time_expressionwaveform_rule : reserved_word_unaffected | waveform_item_comma_waveform_itemwaveform_item_comma_waveform_item : waveform_item comma_waveform_item(s?)comma_waveform_item : ',' waveform_itemwaveform_item : null_with_optional_after_time_expression | value_expression_with_optional_time_expressionnull_with_optional_after_time_expression : reserved_word_null reserved_word_after_and_time_expression(?) value_expression_with_optional_time_expression : value_expression reserved_word_after_and_time_expression(?)reserved_word_after_and_time_expression : reserved_word_after time_expression variable_assignment_statement : label_followed_by_colon(?) name_or_aggregate ':=' expression_rule ';'procedure_call_statement : label_followed_by_colon(?) procedure_name subprogram_parameter_section(?) ';' | <error>if_statement : label_followed_by_colon(?) reserved_word_if boolean_expression reserved_word_then sequential_statement(s) optional_elsif_section(s?) optional_else_section(?) reserved_word_end reserved_word_if if_label(?) ';' | <error>optional_elsif_section : reserved_word_elsif boolean_expression reserved_word_then sequential_statement(s)optional_else_section : reserved_word_else sequential_statement(s)case_statement : label_followed_by_colon(?) reserved_word_case expression_rule reserved_word_is when_choices_sequential_statement(s) reserved_word_end reserved_word_case case_label(?) ';'when_choices_sequential_statement : reserved_word_when choices_pipe_choices '=>' sequential_statement(s)loop_statement : label_followed_by_colon(?) while_boolean_or_for_identifier_in_discrete_range reserved_word_loop sequential_statement(s) reserved_word_end reserved_word_loop loop_label(?) ';'while_boolean_or_for_identifier_in_discrete_range : reserved_word_while_and_boolean_expression | reserved_word_for_identifier_in_discrete_rangereserved_word_while_and_boolean_expression : reserved_word_while boolean_expressionreserved_word_for_identifier_in_discrete_range : reserved_word_for identifier reserved_word_in discrete_rangenext_statement : label_followed_by_colon(?) reserved_word_next loop_label(?) reserved_word_when_and_boolean_expression(?) ';'exit_statement : label_followed_by_colon(?) reserved_word_exit loop_label(?) reserved_word_when_and_boolean_expression(?) ';'reserved_word_when_and_boolean_expression : reserved_word_when boolean_expressionreturn_statement : label_followed_by_colon(?) reserved_word_return expression_rule(?) ';'null_statement : label_followed_by_colon(?) reserved_word_null ';'##################################################### E.7 Interfaces and Associations####################################################interface_list : interface_item_semicolon_interface_iteminterface_item_semicolon_interface_item : interface_item semicolon_interface_item(s?)semicolon_interface_item : ';' interface_iteminterface_item : constant_interface | signal_interface | variable_interface | file_interfaceconstant_interface : reserved_word_constant(?) identifier_comma_identifier ':' reserved_word_in(?) subtype_indication default_value(?) | <error>signal_interface : reserved_word_signal(?) identifier_comma_identifier ':' mode(?) subtype_indication reserved_word_bus(?) default_value(?) | <error>variable_interface : reserved_word_variable(?) identifier_comma_identifier ':' mode(?) subtype_indication default_value(?) | <error>file_interface : reserved_word_file identifier_comma_identifier ':' subtype_indication | <error>mode : reserved_word_inout | reserved_word_out | reserved_word_in | reserved_word_buffer | reserved_word_linkage association_list : actual_formal_comma_actual_formal | <error>actual_formal_comma_actual_formal : actual_part_with_optional_formal_part comma_actual_part_with_optional_formal_part(s?) | <error>comma_actual_part_with_optional_formal_part : ',' actual_part_with_optional_formal_part | <error>actual_part_with_optional_formal_part : formal_part_and_arrow(?) actual_part | <error>formal_part_and_arrow : formal_part '=>' | <error>formal_part : generic_name | port_name | parameter_name | function_name generic_port_parameter_selection | type_mark generic_port_parameter_selection | <error>generic_port_parameter_selection : '(' generic_name_port_name_parameter_name ')' | <error>generic_name_port_name_parameter_name : generic_name | port_name | parameter_name | <error>actual_part : expression_rule | variable_name | reserved_word_open | function_name_signal_name_or_variable_name_selection | type_mark_signal_name_or_variable_name_selection | <error>function_name_signal_name_or_variable_name_selection : function_name signal_name_or_variable_name_in_parenstype_mark_signal_name_or_variable_name_selection : type_mark signal_name_or_variable_name_in_parenssignal_name_or_variable_name_in_parens : '(' signal_name_or_variable_name ')'signal_name_or_variable_name : signal_name | variable_name##################################################### E.8 Expressions####################################################boolean_expression : expression_rulestatic_expression : expression_ruleexpression_rule : relation logic_relation(s?)logic_relation : logic_relation_operator relationlogic_relation_operator : reserved_word_nand | reserved_word_xnor | reserved_word_and | reserved_word_nor | reserved_word_xor | reserved_word_or relation : shift_expression relation_shift_expression(?)relation_shift_expression : relation_operator shift_expression relation_operator : '/=' | '<=' | '>=' | '=' | '>' | '<' shift_expression : simple_expression shift_simple_expression(?)shift_simple_expression : shift_operator simple_expression shift_operator : reserved_word_sll | reserved_word_srl | reserved_word_sla | reserved_word_sra | reserved_word_rol | reserved_word_ror simple_expression : sign(?) term optional_term(s?) sign : '+' | '-' optional_term : add_or_concat_operator term add_or_concat_operator : '+' | '-' | '&'term : factor optional_factor(s?) optional_factor : multiply_operator factor multiply_operator : '*' | '/' | reserved_word_mod | reserved_word_remfactor : reserved_word_abs_and_primary | reserved_word_not_and_primary | primary_exp_primary reserved_word_abs_and_primary : reserved_word_abs primaryreserved_word_not_and_primary : reserved_word_not primaryprimary_exp_primary : primary exponent_primary(?) exponent_primary : '**' primary # notes:## the rules for "primary" is not mutually exclusive:# there are rules that apply such that a given input text# could be one of two different possible interpretations.## there is no way to distinguish between the two possibilities# by simply looking at the token being examined.## 1)## aggregate : '(' optional_choice_arrow(?) expression_rule [ ',' repeat ] ')'# expression in paren : '(' expression_rule ')' ## therefore an aggregate with one entry and no choice arrow is# indistinguishable from an expression in paren.### 2)## function_call # token ( param=>(?) value [,repeat])(?)# literal->identifier # token## therefore a function call with no input parameters is# indistinguishable from a literal identifier.primary : new_qualified_expression # 'new' token ' ( yada ) | new_subtype_indication # 'new' token | qualified_expression # token ' ( yada ) | function_call # token ( param=>(?) value [,repeat])(?) | literal | aggregate # '(' choice=>(?) expression [,repeat] ')' | expression_rule_in_parens | name new_qualified_expression : reserved_word_new qualified_expressionnew_subtype_indication : reserved_word_new subtype_indicationqualified_expression : type_mark_tick_aggregate | type_mark_tick_expression type_mark_tick_expression : type_mark "'" '(' expression_rule ')'type_mark_tick_aggregate : type_mark "'" aggregate
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -