('nonassoc', 'one_timeunits_declaration'),
('nonassoc', 'K_timeunit', 'K_timeprecision')
]
-()
+
+
+IVL_VT_NO_TYPE = 0
+IVL_VT_BOOL = 1
+IVL_VT_LOGIC = 2
+
# -------------- RULES ----------------
()
def p_source_text_1(p):
# { class_type_t*tmp = dynamic_cast<class_type_t*> ($2.type);
# if (tmp == 0) {
# yyerror(@2, "error: class declaration endlabel \"%s\" is not a class name\n", $2.text);
- # $$ = 0;
+ # p[0] = None
# } else {
# $$ = strdupnew(tmp->name.str());
# }
def p_class_declaration_endlabel_opt_3(p):
'''class_declaration_endlabel_opt : '''
print('class_declaration_endlabel_opt_3', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_class_declaration_extends_opt_1(p):
'''class_declaration_extends_opt : K_extends TYPE_IDENTIFIER '''
def p_data_type_or_implicit_4(p):
'''data_type_or_implicit : '''
print('data_type_or_implicit_4', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_data_type_or_implicit_or_void_1(p):
'''data_type_or_implicit_or_void : data_type_or_implicit '''
def p_import_export_1(p):
'''import_export : K_import '''
print('import_export_1', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_import_export_2(p):
'''import_export : K_export '''
print('import_export_2', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_implicit_class_handle_1(p):
'''implicit_class_handle : K_this '''
'''inside_expression : expression K_inside '{' open_range_list '}' '''
print('inside_expression_1', list(p))
# { yyerror(@2, "sorry: \"inside\" expressions not supported yet.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_integer_vector_type_1(p):
'''jump_statement : K_break ';' '''
print('jump_statement_1', list(p))
# { yyerror(@1, "sorry: break statements not supported.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_jump_statement_2(p):
def p_loop_statement_8(p):
'''loop_statement : K_for '(' lpvalue '=' expression ';' expression ';' error ')' statement_or_null '''
print('loop_statement_8', list(p))
- # { $$ = 0;
+ # { p[0] = None
# yyerror(@1, "error: Error in for loop step assignment.");
# }
()
def p_loop_statement_9(p):
'''loop_statement : K_for '(' lpvalue '=' expression ';' error ';' for_step ')' statement_or_null '''
print('loop_statement_9', list(p))
- # { $$ = 0;
+ # { p[0] = None
# yyerror(@1, "error: Error in for loop condition expression.");
# }
()
def p_loop_statement_10(p):
'''loop_statement : K_for '(' error ')' statement_or_null '''
print('loop_statement_10', list(p))
- # { $$ = 0;
+ # { p[0] = None
# yyerror(@1, "error: Incomprehensible for loop.");
# }
()
def p_loop_statement_11(p):
'''loop_statement : K_while '(' error ')' statement_or_null '''
print('loop_statement_11', list(p))
- # { $$ = 0;
+ # { p[0] = None
# yyerror(@1, "error: Error in while loop condition.");
# }
()
def p_loop_statement_12(p):
'''loop_statement : K_do statement_or_null K_while '(' error ')' ';' '''
print('loop_statement_12', list(p))
- # { $$ = 0;
+ # { p[0] = None
# yyerror(@1, "error: Error in do/while loop condition.");
# }
()
def p_loop_statement_13(p):
'''loop_statement : K_foreach '(' IDENTIFIER '[' error ']' ')' statement_or_null '''
print('loop_statement_13', list(p))
- # { $$ = 0;
+ # { p[0] = None
# yyerror(@4, "error: Errors in foreach loop variables list.");
# }
()
'''procedural_assertion_statement : K_assert '(' expression ')' statement %prec less_than_K_else '''
print('procedural_assertion_statement_1', list(p))
# { yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_procedural_assertion_statement_2(p):
'''procedural_assertion_statement : K_assert '(' expression ')' K_else statement '''
print('procedural_assertion_statement_2', list(p))
# { yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_procedural_assertion_statement_3(p):
'''procedural_assertion_statement : K_assert '(' expression ')' statement K_else statement '''
print('procedural_assertion_statement_3', list(p))
# { yyerror(@1, "sorry: Simple immediate assertion statements not implemented.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_property_qualifier_1(p):
def p_signing_1(p):
'''signing : K_signed '''
print('signing_1', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_signing_2(p):
'''signing : K_unsigned '''
print('signing_2', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_simple_type_or_string_1(p):
'''simple_type_or_string : integer_vector_type '''
def p_statement_or_null_2(p):
'''statement_or_null : attribute_list_opt ';' '''
print('statement_or_null_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_stream_expression_1(p):
'''stream_expression : expression '''
# { /* streaming concatenation is a SystemVerilog thing. */
# if (gn_system_verilog()) {
# yyerror(@2, "sorry: Streaming concatenation not supported.");
- # $$ = 0;
+ # p[0] = None
# } else {
# yyerror(@2, "error: Streaming concatenation requires SystemVerilog");
- # $$ = 0;
+ # p[0] = None
# }
# }
()
print('tf_port_item_2', list(p))
# { yyerror(@3, "error: Error in task/function port item after port name %s.", $3);
# yyerrok;
- # $$ = 0;
+ # p[0] = None
# }
()
def p_tf_port_item_expr_opt_1(p):
def p_tf_port_item_expr_opt_2(p):
'''tf_port_item_expr_opt : '''
print('tf_port_item_expr_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_tf_port_list_1(p):
'''tf_port_list : _embed0_tf_port_list tf_port_item_list '''
def p_attribute_list_opt_2(p):
'''attribute_list_opt : '''
print('attribute_list_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_attribute_instance_list_1(p):
'''attribute_instance_list : K_PSTAR K_STARP '''
print('attribute_instance_list_1', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_attribute_instance_list_2(p):
'''attribute_instance_list : K_PSTAR attribute_list K_STARP '''
def p_block_item_decls_opt_1(p):
'''block_item_decls_opt : block_item_decls '''
print('block_item_decls_opt_1', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_block_item_decls_opt_2(p):
'''block_item_decls_opt : '''
print('block_item_decls_opt_2', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_type_declaration_1(p):
'''type_declaration : K_typedef data_type IDENTIFIER dimensions_opt ';' '''
print('struct_union_member_2', list(p))
# { yyerror(@2, "Error in struct/union member.");
# yyerrok;
- # $$ = 0;
+ # p[0] = None
# }
()
def p_case_item_1(p):
def p_delay3_opt_2(p):
'''delay3_opt : '''
print('delay3_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_delay_value_list_1(p):
'''delay_value_list : delay_value '''
# { verinum*tmp = $1;
# if (tmp == 0) {
# yyerror(@1, "internal error: delay.");
- # $$ = 0;
+ # p[0] = None
# } else {
# $$ = new PENumber(tmp);
# FILE_NAME($$, @1);
# { verireal*tmp = $1;
# if (tmp == 0) {
# yyerror(@1, "internal error: delay.");
- # $$ = 0;
+ # p[0] = None
# } else {
# $$ = new PEFNumber(tmp);
# FILE_NAME($$, @1);
'''event_control : '@' '(' error ')' '''
print('event_control_3', list(p))
# { yyerror(@1, "error: Malformed event control expression.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_event_expression_list_1(p):
print('expression_11', list(p))
# { yyerror(@1, "error: '~' '&' is not a valid expression. "
# "Please use operator '~&' instead.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_expression_12(p):
print('expression_12', list(p))
# { yyerror(@1, "error: '~' '|' is not a valid expression. "
# "Please use operator '~|' instead.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_expression_13(p):
print('expression_13', list(p))
# { yyerror(@1, "error: '~' '^' is not a valid expression. "
# "Please use operator '~^' instead.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_expression_14(p):
print('expression_17', list(p))
# { yyerror(@1, "error: Operand of unary ! "
# "is not a primary expression.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_expression_18(p):
print('expression_18', list(p))
# { yyerror(@1, "error: Operand of reduction ^ "
# "is not a primary expression.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_expression_19(p):
# $$ = tmp;
# } else {
# yyerror(@1, "error: Concatenations are not allowed to be empty.");
- # $$ = 0;
+ # p[0] = None
# }
# }
()
def p_function_item_list_opt_2(p):
'''function_item_list_opt : '''
print('function_item_list_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_function_item_list_1(p):
'''function_item_list : function_item '''
def p_function_item_2(p):
'''function_item : block_item_decl '''
print('function_item_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_gate_instance_1(p):
'''gate_instance : IDENTIFIER '(' expression_list_with_nuls ')' '''
def p_unsigned_signed_opt_1(p):
'''unsigned_signed_opt : K_signed '''
print('unsigned_signed_opt_1', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_unsigned_signed_opt_2(p):
'''unsigned_signed_opt : K_unsigned '''
print('unsigned_signed_opt_2', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_unsigned_signed_opt_3(p):
'''unsigned_signed_opt : '''
print('unsigned_signed_opt_3', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_signed_unsigned_opt_1(p):
'''signed_unsigned_opt : K_signed '''
print('signed_unsigned_opt_1', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_signed_unsigned_opt_2(p):
'''signed_unsigned_opt : K_unsigned '''
print('signed_unsigned_opt_2', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_signed_unsigned_opt_3(p):
'''signed_unsigned_opt : '''
print('signed_unsigned_opt_3', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_atom2_type_1(p):
'''atom2_type : K_byte '''
'''lpvalue : streaming_concatenation '''
print('lpvalue_4', list(p))
# { yyerror(@1, "sorry: streaming concatenation not supported in l-values.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_cont_assign_1(p):
def p_module_1(p):
'''module : attribute_list_opt module_start lifetime_opt IDENTIFIER _embed0_module module_package_import_list_opt module_parameter_port_list_opt module_port_list_opt module_attribute_foreign ';' _embed1_module timeunits_declaration_opt _embed2_module module_item_list_opt module_end _embed3_module endlabel_opt '''
print('module_1', list(p))
+ params = p[7]
clsname = [Leaf(token.NAME, 'class'),
Leaf(token.NAME, p[4], prefix=' '),
Leaf(token.COLON, ':')]
- stmt = Node(syms.pass_stmt, [Leaf(token.NAME, "pass"),])
- stmts = Node(syms.small_stmt, [stmt, Leaf(token.NEWLINE, '\n')])
- stmts = Node(syms.stmt, [stmts])
+ pass_stmt = Node(syms.pass_stmt, [Leaf(token.NAME, "pass"),])
+ if params:
+ params = [Leaf(token.LPAR, '(')] + params + [Leaf(token.RPAR, ')')]
+ fn = [Leaf(token.NAME, 'def'),
+ Leaf(token.NAME, '__init__', prefix=' '),
+ Node(syms.parameters, params),
+ Leaf(token.COLON, ':')]
+ fndef = Node(syms.funcdef, fn)
+ stmts = Node(syms.stmt, [fndef])
+ else:
+ stmts = Node(syms.small_stmt, [pass_stmt, Leaf(token.NEWLINE, '\n')])
+ stmts = Node(syms.stmt, [stmts])
suite = Node(syms.suite, [Leaf(token.NEWLINE, '\n'),
Leaf(token.INDENT, ' '),
stmts,
def p_endlabel_opt_2(p):
'''endlabel_opt : '''
print('endlabel_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_module_attribute_foreign_1(p):
'''module_attribute_foreign : K_PSTAR IDENTIFIER K_integer IDENTIFIER '=' STRING ';' K_STARP '''
print('module_attribute_foreign_1', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_module_attribute_foreign_2(p):
'''module_attribute_foreign : '''
print('module_attribute_foreign_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_module_port_list_opt_1(p):
'''module_port_list_opt : '(' list_of_ports ')' '''
def p_module_port_list_opt_3(p):
'''module_port_list_opt : '''
print('module_port_list_opt_3', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_module_port_list_opt_4(p):
'''module_port_list_opt : '(' error ')' '''
print('module_port_list_opt_4', list(p))
# { yyerror(@2, "Errors in port declarations.");
# yyerrok;
- # $$ = 0;
+ # p[0] = None
# }
()
def p_module_parameter_port_list_opt_1(p):
def p_module_parameter_port_list_opt_2(p):
'''module_parameter_port_list_opt : '#' '(' module_parameter_port_list ')' '''
print('module_parameter_port_list_opt_2', list(p))
- p[0] = p[2]
+ p[0] = p[3]
()
def p_module_parameter_port_list_1(p):
'''module_parameter_port_list : K_parameter param_type parameter_assign '''
def p_module_parameter_port_list_3(p):
'''module_parameter_port_list : module_parameter_port_list ',' K_parameter param_type parameter_assign '''
print('module_parameter_port_list_3', list(p))
+ p[1].append(Leaf(token.COMMA, ','))
+ p[5].prefix=' ' # add a space after the comma, must go in the parameter
p[1].append(p[5])
p[0] = p[1]
()
def p_parameter_value_ranges_opt_2(p):
'''parameter_value_ranges_opt : '''
print('parameter_value_ranges_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_parameter_value_ranges_1(p):
'''parameter_value_ranges : parameter_value_ranges parameter_value_range '''
def p_value_range_expression_2(p):
'''value_range_expression : K_inf '''
print('value_range_expression_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_value_range_expression_3(p):
'''value_range_expression : '+' K_inf '''
print('value_range_expression_3', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_value_range_expression_4(p):
'''value_range_expression : '-' K_inf '''
print('value_range_expression_4', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_from_exclude_1(p):
'''from_exclude : K_from '''
print('from_exclude_1', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_from_exclude_2(p):
'''from_exclude : K_exclude '''
print('from_exclude_2', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_parameter_value_opt_1(p):
'''parameter_value_opt : '#' '(' expression_list_with_nuls ')' '''
print('parameter_value_opt_5', list(p))
# { yyerror(@1, "error: syntax error in parameter value "
# "assignment list.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_parameter_value_opt_6(p):
'''parameter_value_opt : '''
print('parameter_value_opt_6', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_parameter_value_byname_1(p):
'''parameter_value_byname : '.' IDENTIFIER '(' expression ')' '''
def p_port_opt_2(p):
'''port_opt : '''
print('port_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_port_name_1(p):
'''port_name : '.' IDENTIFIER '(' expression ')' '''
def p_dimensions_opt_1(p):
'''dimensions_opt : '''
print('dimensions_opt_1', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_dimensions_opt_2(p):
'''dimensions_opt : dimensions '''
def p_edge_operator_1(p):
'''edge_operator : K_posedge '''
print('edge_operator_1', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_edge_operator_2(p):
'''edge_operator : K_negedge '''
print('edge_operator_2', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_specify_edge_path_1(p):
'''specify_edge_path : '(' specify_path_identifiers spec_polarity K_EG '(' specify_path_identifiers polarity_operator expression ')' ')' '''
print('specify_simple_path_decl_3', list(p))
# { yyerror(@3, "Syntax error in delay value list.");
# yyerrok;
- # $$ = 0;
+ # p[0] = None
# }
()
def p_specify_simple_path_1(p):
def p_spec_polarity_3(p):
'''spec_polarity : '''
print('spec_polarity_3', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_spec_reference_event_1(p):
'''spec_reference_event : K_posedge expression '''
# { PEventStatement*tmp = $1;
# if (tmp == 0) {
# yyerror(@1, "error: Invalid event control.");
- # $$ = 0;
+ # p[0] = None
# } else {
# tmp->set_statement($2);
# $$ = tmp;
def p_statement_or_null_list_opt_2(p):
'''statement_or_null_list_opt : '''
print('statement_or_null_list_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_statement_or_null_list_1(p):
'''statement_or_null_list : statement_or_null_list statement_or_null '''
def p_task_item_list_opt_2(p):
'''task_item_list_opt : '''
print('task_item_list_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_tf_port_list_opt_1(p):
'''tf_port_list_opt : tf_port_list '''
def p_tf_port_list_opt_2(p):
'''tf_port_list_opt : '''
print('tf_port_list_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_udp_body_1(p):
'''udp_body : K_table udp_entry_list K_endtable '''
print('udp_body_2', list(p))
# { lex_end_table();
# yyerror(@1, "error: Empty UDP table.");
- # $$ = 0;
+ # p[0] = None
# }
()
def p_udp_body_3(p):
# { lex_end_table();
# yyerror(@2, "Errors in UDP table");
# yyerrok;
- # $$ = 0;
+ # p[0] = None
# }
()
def p_udp_entry_list_1(p):
def p_udp_init_opt_2(p):
'''udp_init_opt : '''
print('udp_init_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_udp_input_list_1(p):
'''udp_input_list : udp_input_sym '''
def p_udp_reg_opt_1(p):
'''udp_reg_opt : K_reg '''
print('udp_reg_opt_1', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_udp_reg_opt_2(p):
'''udp_reg_opt : '''
print('udp_reg_opt_2', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_udp_initial_expr_opt_1(p):
'''udp_initial_expr_opt : '=' expression '''
def p_udp_initial_expr_opt_2(p):
'''udp_initial_expr_opt : '''
print('udp_initial_expr_opt_2', list(p))
- # { $$ = 0; }
+ # { p[0] = None }
()
def p_udp_input_declaration_list_1(p):
'''udp_input_declaration_list : K_input IDENTIFIER '''
def p_K_packed_opt_1(p):
'''K_packed_opt : K_packed '''
print('K_packed_opt', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_K_packed_opt_2(p):
'''K_packed_opt : '''
print('K_packed_opt', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_K_reg_opt_1(p):
'''K_reg_opt : K_reg '''
print('K_reg_opt', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_K_reg_opt_2(p):
'''K_reg_opt : '''
print('K_reg_opt', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_K_static_opt_1(p):
'''K_static_opt : K_static '''
print('K_static_opt', list(p))
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_K_static_opt_2(p):
'''K_static_opt : '''
print('K_static_opt', list(p))
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_K_virtual_opt_1(p):
'''K_virtual_opt : K_virtual '''
print(p)
- # { $$ = true; }
+ # { p[0] = True; }
()
def p_K_virtual_opt_2(p):
'''K_virtual_opt : '''
print(p)
- # { $$ = false; }
+ # { p[0] = False; }
()
def p_error(p):