def dectype(parameters):
	ice9_parser_global.logger.debug("Entering dectype")

	paramter_identifier_list = ice9_parser_var.idlist()	
	
	if ice9_parser_global.tok.type == 'COLON':
		ice9_parser_global.consume()
		ice9_parser_global.logger.debug(ice9_parser_global.tok)
	else:
		print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting ':'"
		sys.exit()

	if ice9_parser_global.tok.type == 'ID':
		paramter_identifier_type = ice9_parser_global.tok.value

		if paramter_identifier_type not in ice9_st_type.st_type:
			print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value \
				 + " type", paramter_identifier_type, "not defined"
			sys.exit()
	
		ice9_parser_global.consume()
		ice9_parser_global.logger.debug(ice9_parser_global.tok)
	else:
		print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting id"
		sys.exit()

	for param in paramter_identifier_list:
		id_node = ice9_node.id_node(str(param), paramter_identifier_type, 0)
		parameters.append(id_node)

	ice9_parser_global.logger.debug("Exiting dectype")
def vartype():
    ice9_parser_global.logger.debug("Entering vartype")

    var_node_list = list()

    if ice9_parser_global.tok.type == "ID":
        identifier_list = idlist()
    else:
        print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting id"
        sys.exit()

    if ice9_parser_global.tok.type == "COLON":
        ice9_parser_global.consume()
        ice9_parser_global.logger.debug(ice9_parser_global.tok)
    else:
        print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting ':'"
        sys.exit()

    if ice9_parser_global.tok.type == "ID":
        type_node = typeid()
    else:
        print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting id"
        sys.exit()

    for identifier in identifier_list:
        # Depending on the scope, calculate location for variable
        # If scope is GLOBAL, then location is in GLOBAL section
        # If scope is a procedure, then location is on stack, relative to FP
        if ice9_parser_global.scope[-1] == "GLOBAL":
            address = ice9_parser_global.get_next_global_address()
            ice9_parser_global.global_pointer += type_node.length - 1
        else:
            address = ice9_st_proc.st_proc[ice9_parser_global.scope[-1]].local_variable_line
            ice9_st_proc.st_proc[ice9_parser_global.scope[-1]].local_variable_line -= type_node.length

            # Add entry to symbol table
        identifier_entry = ice9_st_var.st_var_entry(
            type_node.data_type, type_node.dimension, address, type_node.dimension_length
        )
        ice9_st_var.add_entry_to_st_var(str(identifier), identifier_entry)
        id_node = ice9_node.id_node(str(identifier), type_node.data_type, type_node.dimension)
        id_node.set_basic_data_type()
        var_node_list.append(id_node)

    var_node = ice9_node.var_node(var_node_list, type_node)
    ice9_parser_global.logger.debug("Exiting vartype")
    return var_node